diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..b0c0c8bd --- /dev/null +++ b/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "airbnb" +} diff --git a/.npmignore b/.npmignore index d2e1dc1b..35b54cdc 100644 --- a/.npmignore +++ b/.npmignore @@ -2,7 +2,7 @@ .editorconfig .travis.yml testrunner.js -webpack.production.config.js +webpack.config.js examples/ release/ tests/ diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..2b0aa212 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +8.2.1 diff --git a/.travis.yml b/.travis.yml index ac935e72..3db720c2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ language: node_js sudo: false node_js: - - '4.1' + - '8.2.1' diff --git a/API.md b/API.md index 42150562..9fb7bb0a 100644 --- a/API.md +++ b/API.md @@ -1,90 +1,82 @@ # API -- [Formsy.Form](#formsyform) - - [className](#classname) - - [mapping](#mapping) - - [validationErrors](#validationerrors) - - [onSubmit()](#onsubmit) - - [onValid()](#onvalid) - - [onInvalid()](#oninvalid) - - [onValidSubmit()](#onvalidsubmit) - - [onInvalidSubmit()](#oninvalidsubmit) - - [onChange()](#onchange) - - [reset()](#resetform) - - [getModel()](#getmodel) - - [updateInputsWithError()](#updateinputswitherrorerrors) - - [preventExternalInvalidation](#preventexternalinvalidation) -- [Formsy.Mixin](#formsymixin) - - [name](#name) - - [value](#value) - - [validations](#validations) - - [validationError](#validationerror) - - [validationErrors](#validationerrors-1) - - [required](#required) - - [getValue()](#getvalue) - - [setValue()](#setvalue) - - [resetValue()](#resetvalue) - - [getErrorMessage()](#geterrormessage) - - [getErrorMessages()](#geterrormessages) - - [isValid()](#isvalid) - - [isValidValue()](#isvalidvalue) - - [isRequired()](#isrequired) - - [showRequired()](#showrequired) - - [showError()](#showerror) - - [isPristine()](#ispristine) - - [isFormDisabled()](#isformdisabled) - - [isFormSubmitted()](#isformsubmitted) - - [validate](#validate) - - [formNoValidate](#formnovalidate) -- [Formsy.HOC](#formsyhoc) - - [innerRef](#innerRef) -- [Formsy.Decorator](#formsydecorator) -- [Formsy.addValidationRule](#formsyaddvalidationrule) -- [Validators](#validators) - -### Formsy.Form - -#### className -```jsx - -``` -Sets a class name on the form itself. - -#### mapping -```jsx -var MyForm = React.createClass({ - mapInputs: function (inputs) { +- [Formsy](#formsy) + - [mapping](#mapping) + - [validationErrors](#validationErrors) + - [onSubmit()](#onSubmit) + - [onValid()](#onValid) + - [onInvalid()](#onInvalid) + - [onValidSubmit()](#onValidsubmit) + - [onInvalidSubmit()](#onInvalidsubmit) + - [onChange()](#onChange) + - [reset()](#reset) + - [getModel()](#getModel) + - [updateInputsWithError()](#updateInputsWithError) + - [preventExternalInvalidation](#preventExternalInvalidation) +- [withFormsy](#withFormsy) + - [name](#name) + - [innerRef](#innerRef) + - [value](#value) + - [validations](#validations) + - [validationError](#validationError) + - [validationErrors](#validationErrors) + - [required](#required) + - [getValue()](#getvalue) + - [setValue()](#setValue) + - [resetValue()](#resetValue) + - [getErrorMessage()](#getErrorMessage) + - [getErrorMessages()](#getErrorMessages) + - [isValid()](#isValid) + - [isValidValue()](#isValidValue) + - [isRequired()](#isRequired) + - [showRequired()](#showRequired) + - [showError()](#showError) + - [isPristine()](#isPristine) + - [isFormDisabled()](#isFormDisabled) + - [isFormSubmitted()](#isFormSubmitted) + - [formNoValidate](#formNoValidate) +- [propTypes](#propTypes) +- [addValidationRule](#addValidationRule) +- [Validators](#validators) + +### Formsy + +`import Formsy from 'react-formsy';` + +#### mapping + +```jsx +class MyForm extends React.Component { + mapInputs(inputs) { return { 'field1': inputs.foo, 'field2': inputs.bar }; - }, - submit: function (model) { + } + submit(model) { model; // {field1: '', field2: ''} - }, - render: function () { + } + render() { return ( - + - + ); } -}) +} ``` + Use mapping to change the data structure of your input elements. This structure is passed to the submit hooks. -#### validationErrors +#### validationErrors + You can manually pass down errors to your form. In combination with `onChange` you are able to validate using an external validator. ```jsx -var Form = React.createClass({ - getInitialState: function () { - return { - validationErrors: {} - }; - }, - validateForm: function (values) { +class Form extends React.Component { + state = { validationErrors: {} }; + validateForm = (values) => { if (!values.foo) { this.setState({ validationErrors: { @@ -96,152 +88,213 @@ var Form = React.createClass({ validationErrors: {} }); } - }, - render: function () { + } + render() { return ( - + - + ); } -}); +} ``` -#### onSubmit(data, resetForm, invalidateForm) +#### onSubmit(data, resetForm, invalidateForm) + ```jsx - + ``` + Takes a function to run when the submit button has been clicked. The first argument is the data of the form. The second argument will reset the form. The third argument will invalidate the form by taking an object that maps to inputs. This is useful for server side validation. E.g. `{email: "This email is taken"}`. Resetting or invalidating the form will cause **setState** to run on the form element component. -#### onValid() +#### onValid() + ```jsx - + ``` + Whenever the form becomes valid the "onValid" handler is called. Use it to change state of buttons or whatever your heart desires. -#### onInvalid() +#### onInvalid() + ```jsx - + ``` + Whenever the form becomes invalid the "onInvalid" handler is called. Use it to for example revert "onValid" state. -#### onValidSubmit(model, resetForm, invalidateForm) +#### onValidSubmit(model, resetForm, invalidateForm) + ```jsx - + ``` + Triggers when form is submitted with a valid state. The arguments are the same as on `onSubmit`. -#### onInvalidSubmit(model, resetForm, invalidateForm) +#### onInvalidSubmit(model, resetForm, invalidateForm) + ```jsx - + ``` + Triggers when form is submitted with an invalid state. The arguments are the same as on `onSubmit`. -#### onChange(currentValues, isChanged) +#### onChange(currentValues, isChanged) + ```jsx - + ``` + "onChange" triggers when setValue is called on your form elements. It is also triggered when dynamic form elements have been added to the form. The "currentValues" is an object where the key is the name of the input and the value is the current value. The second argument states if the forms initial values actually has changed. -#### reset(values) +#### reset(values) + ```jsx -var MyForm = React.createClass({ - resetForm: function () { +class MyForm extends React.Component { + resetForm = () => { this.refs.form.reset(); - }, - render: function () { + } + render() { return ( - + ... - + ); } -}); +} ``` + Manually reset the form to its pristine state. You can also pass an object that inserts new values into the inputs. Keys are name of input and value is of course the value. -#### getModel() +#### getModel() + ```jsx -var MyForm = React.createClass({ - getMyData: function () { +class MyForm extends React.Component { + getMyData = () => { alert(this.refs.form.getModel()); - }, - render: function () { + } + render() { return ( - + ... - + ); } -}); +} ``` + Manually get values from all registered components. Keys are name of input and value is of course the value. -#### updateInputsWithError(errors) +#### updateInputsWithError(errors) + ```jsx -var MyForm = React.createClass({ - someFunction: function () { +class MyForm extends React.Component { + someFunction = () => { this.refs.form.updateInputsWithError({ email: 'This email is taken', 'field[10]': 'Some error!' }); - }, - render: function () { + } + render() { return ( - + ... - + ); } -}); +} ``` -Manually invalidate the form by taking an object that maps to inputs. This is useful for server side validation. You can also use a third parameter to the [`onSubmit`](#onsubmitdata-resetform-invalidateform), [`onValidSubmit`](#onvalidsubmitmodel-resetform-invalidateform) or [`onInvalidSubmit`](#oninvalidsubmitmodel-resetform-invalidateform). -#### preventExternalInvalidation +Manually invalidate the form by taking an object that maps to inputs. This is useful for server side validation. You can also use a third parameter to the [`onSubmit`](#onSubmit), [`onValidSubmit`](#onValid) or [`onInvalidSubmit`](#onInvalid). + +#### preventExternalInvalidation + ```jsx -var MyForm = React.createClass({ - onSubmit: function (model, reset, invalidate) { +class MyForm extends React.Component { + onSubmit(model, reset, invalidate) { invalidate({ foo: 'Got some error' }); - }, - render: function () { + } + render() { return ( - + ... - + ); } -}); +} ``` + With the `preventExternalInvalidation` the input will not be invalidated though it has an error. -### Formsy.Mixin +### `withFormsy` + +All Formsy input components must be wrapped in the `withFormsy` higher-order component, which provides the following properties and methods through `props`. + +```jsx +import { withFormsy } from 'formsy-react'; + +class MyInput extends React.Component { + render() { + return ( +
+ this.props.setValue(e.target.value)}/> +
+ ); + } +} +export default withFormsy(MyInput); +``` + +#### name -#### name ```jsx - - + + ``` + The name is required to register the form input component in the form. You can also use dot notation. This will result in the "form model" being a nested object. `{email: 'value', address: {street: 'value'}}`. -#### value +#### innerRef + +Use an `innerRef` prop to get a reference to your DOM node. + ```jsx - +class MyForm extends React.Component { + componentDidMount() { + this.searchInput.focus() + } + render() { + return ( + + { this.searchInput = c; }} /> + + ); + } +} ``` + +#### value + +```jsx + +``` + You should always use the [**getValue()**](#getvalue) method inside your formsy form element. To pass an initial value, use the value attribute. This value will become the "pristine" value and any reset of the form will bring back this value. -#### validations +#### validations + ```jsx - - - + + - ``` + A comma separated list with validation rules. Take a look at [**Validators**](#validators) to see default rules. Use ":" to separate argument passed to the validator. The argument will go through a **JSON.parse** converting them into correct JavaScript types. Meaning: ```jsx - - + + ``` + Works just fine. -#### validationError +#### validationError + ```jsx - + ``` + The message that will show when the form input component is invalid. It will be used as a default error. -#### validationErrors +#### validationErrors + ```jsx - ``` + The message that will show when the form input component is invalid. You can combine this with `validationError`. Keys not found in `validationErrors` defaults to the general error message. -#### required +#### required + ```jsx - + ``` A property that tells the form that the form input component value is required. By default it uses `isDefaultRequiredValue`, but you can define your own definition of what defined a required state. ```jsx - + ``` + Would be typical for a checkbox type of form element that must be checked, e.g. agreeing to Terms of Service. -#### getValue() +#### getValue() + ```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - render: function () { +class MyInput extends React.Component { + render() { return ( - + ); } -}); +} ``` + Gets the current value of the form input component. -#### setValue(value) +#### setValue(value\[, validate = true]) + ```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - changeValue: function (event) { - this.setValue(event.currentTarget.value); - }, - render: function () { +class MyInput extends React.Component { + changeValue = (event) => { + this.props.setValue(event.currentTarget.value); + } + render() { return ( - + ); } -}); +} ``` + Sets the value of your form input component. Notice that it does not have to be a text input. Anything can set a value on the component. Think calendars, checkboxes, autocomplete stuff etc. Running this method will trigger a **setState()** on the component and do a render. -#### resetValue() +You can also set the value without forcing an immediate validation by passing a second parameter of `false`. This is useful in cases where you want to only validate on blur / change / etc. + +#### resetValue() + ```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - changeValue: function (event) { - this.setValue(event.currentTarget.value); - }, - render: function () { +class MyInput extends React.Component { + changeValue = (event) => { + this.props.setValue(event.currentTarget.value); + } + render() { return (
- - + +
); } -}); +} ``` + Resets to empty value. This will run a **setState()** on the component and do a render. -#### getErrorMessage() +#### getErrorMessage() + ```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - changeValue: function (event) { - this.setValue(event.currentTarget.value); - }, - render: function () { +class MyInput extends React.Component { + changeValue = (event) => { + this.props.setValue(event.currentTarget.value); + } + render() { return (
- - {this.getErrorMessage()} + + {this.props.getErrorMessage()}
); } -}); +} ``` + Will return the validation message set if the form input component is invalid. If form input component is valid it returns **null**. -#### getErrorMessages() +#### getErrorMessages() + Will return the validation messages set if the form input component is invalid. If form input component is valid it returns empty array. -#### isValid() +#### isValid() + ```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - changeValue: function (event) { - this.setValue(event.currentTarget.value); - }, - render: function () { - var face = this.isValid() ? ':-)' : ':-('; +class MyInput extends React.Component { + changeValue = (event) => { + this.props.setValue(event.currentTarget.value); + } + render() { + var face = this.props.isValid() ? ':-)' : ':-('; return (
{face} - - {this.getErrorMessage()} + + {this.props.getErrorMessage()}
); } -}); +} ``` + Returns the valid state of the form input component. -#### isValidValue() +#### isValidValue() + You can pre-verify a value against the passed validators to the form element. ```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - changeValue: function (event) { +class MyInput extends React.Component { + changeValue = (event) => { if (this.isValidValue(event.target.value)) { - this.setValue(event.target.value); + this.props.setValue(event.target.value); } - }, - render: function () { - return ; + } + render() { + return ; } }); -var MyForm = React.createClass({ - render: function () { +class MyForm extends React.Component { + render() { return ( - + - + ); } -}); +} ``` -#### isRequired() +#### isRequired() + ```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - changeValue: function (event) { - this.setValue(event.currentTarget.value); - }, - render: function () { +class MyInput extends React.Component { + changeValue = (event) => { + this.props.setValue(event.currentTarget.value); + } + render() { return (
- {this.props.label} {this.isRequired() ? '*' : null} - - {this.getErrorMessage()} + {this.props.label} {this.props.isRequired() ? '*' : null} + + {this.props.getErrorMessage()}
); } -}); +} ``` + Returns true if the required property has been passed. -#### showRequired() +#### showRequired() + ```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - changeValue: function (event) { - this.setValue(event.currentTarget.value); - }, - render: function () { - var className = this.showRequired() ? 'required' : ''; +class MyInput extends React.Component { + changeValue = (event) => { + this.props.setValue(event.currentTarget.value); + } + render() { + var className = this.props.showRequired() ? 'required' : ''; return (
- - {this.getErrorMessage()} + + {this.props.getErrorMessage()}
); } -}); +} ``` + Lets you check if the form input component should indicate if it is a required field. This happens when the form input component value is empty and the required prop has been passed. -#### showError() +#### showError() + ```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - changeValue: function (event) { - this.setValue(event.currentTarget.value); - }, - render: function () { - var className = this.showRequired() ? 'required' : this.showError() ? 'error' : ''; +class MyInput extends React.Component { + changeValue = (event) => { + this.props.setValue(event.currentTarget.value); + } + render() { + var className = this.props.showRequired() ? 'required' : this.props.showError() ? 'error' : ''; return (
- - {this.getErrorMessage()} + + {this.props.getErrorMessage()}
); } -}); +} ``` + Lets you check if the form input component should indicate if there is an error. This happens if there is a form input component value and it is invalid or if a server error is received. -#### isPristine() +#### isPristine() + ```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - changeValue: function (event) { - this.setValue(event.currentTarget.value); - }, - render: function () { +class MyInput extends React.Component { + changeValue = (event) => { + this.props.setValue(event.currentTarget.value); + } + render() { return (
- - {this.isPristine() ? 'You have not touched this yet' : ''} + + {this.props.isPristine() ? 'You have not touched this yet' : ''}
); } -}); +} ``` -By default all formsy input elements are pristine, which means they are not "touched". As soon as the [**setValue**](#setvaluevalue) method is run it will no longer be pristine. -**note!** When the form is reset, using the resetForm callback function on for example [**onSubmit**](#onsubmitdata-resetform-invalidateform) the inputs are reset to their pristine state. +By default all Formsy input elements are pristine, which means they are not "touched". As soon as the [**setValue**](#setValue) method is run it will no longer be pristine. + +**note!** When the form is reset (using `reset(...)`) the inputs are reset to their pristine state. + +#### isFormDisabled() -#### isFormDisabled() ```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - render: function () { +class MyInput extends React.Component { + render() { return (
- +
); } -}); +} -React.render(); +React.render(); ``` + You can now disable the form itself with a prop and use **isFormDisabled()** inside form elements to verify this prop. -#### isFormSubmitted() +#### isFormSubmitted() + ```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - render: function () { - var error = this.isFormSubmitted() ? this.getErrorMessage() : null; +class MyInput extends React.Component { + render() { + var error = this.props.isFormSubmitted() ? this.props.getErrorMessage() : null; return (
- + {error}
); } -}); +} ``` -You can check if the form has been submitted. -#### validate -```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - changeValue: function (event) { - this.setValue(event.target.value); - }, - validate: function () { - return !!this.getValue(); - }, - render: function () { - return ( -
- -
- ); - } -}); +You can check if the form has been submitted. -React.render(); -``` -You can create custom validation inside a form element. The validate method defined will be run when you set new values to the form element. It will also be run when the form validates itself. This is an alternative to passing in validation rules as props. +#### formNoValidate -#### formNoValidate To avoid native validation behavior on inputs, use the React `formNoValidate` property. -```jsx -var MyInput = React.createClass({ - mixins: [Formsy.Mixin], - render: function () { - return ( -
- -
- ); - } -}); -``` -### Formsy.HOC -The same methods as the mixin are exposed to the HOC version of the element component, though through the `props`, not on the instance. ```jsx -import {HOC} from 'formsy-react'; - -class MyInputHoc extends React.Component { +class MyInput extends React.Component { render() { return (
- this.props.setValue(e.target.value)}/> +
); } -}; -export default HOC(MyInputHoc); +} ``` -#### innerRef +### `propTypes` -Use an `innerRef` prop to get a reference to your DOM node. +If you are using React's PropType type checking, you can spread Formsy’s propTypes into your local propTypes to avoid having to repeatedly add `withFormsy`’s methods to your components. ```jsx -var MyForm = React.createClass({ - componentDidMount() { - this.searchInput.focus() - }, - render: function () { - return ( - - { this.searchInput = c; }} /> - - ); - } -}) -``` +import PropTypes from 'prop-types'; +import { propTypes } from 'formsy-react'; -### Formsy.Decorator -The same methods as the mixin are exposed to the decorator version of the element component, though through the `props`, not on the instance. -```jsx -import {Decorator as FormsyElement} from 'formsy-react'; - -@FormsyElement() class MyInput extends React.Component { - render() { - return ( -
- this.props.setValue(e.target.value)}/> -
- ); + static propTypes = { + firstProp: PropTypes.string, + secondProp: PropTypes.object, + ...propTypes } +} + +MyInput.propTypes = { + firstProp: PropTypes.string, + secondProp: PropTypes.object, + ...propTypes, }; -export default MyInput ``` -### Formsy.addValidationRule(name, ruleFunc) +### `addValidationRule(name, ruleFunc)` + +`import { addValidationRule } from 'formsy-react';` + An example: + ```jsx -Formsy.addValidationRule('isFruit', function (values, value) { +addValidationRule('isFruit', function (values, value) { return ['apple', 'orange', 'pear'].indexOf(value) >= 0; }); ``` + ```jsx - + ``` + Another example: + ```jsx -Formsy.addValidationRule('isIn', function (values, value, array) { +addValidationRule('isIn', function (values, value, array) { return array.indexOf(value) >= 0; }); ``` + ```jsx - + ``` + Cross input validation: + ```jsx -Formsy.addValidationRule('isMoreThan', function (values, value, otherField) { +addValidationRule('isMoreThan', function (values, value, otherField) { // The this context points to an object containing the values // {childAge: "", parentAge: "5"} // otherField argument is from the validations rule ("childAge") return Number(value) > Number(values[otherField]); }); ``` + ```jsx - - + + ``` -## Validators + +## Validators + **matchRegexp** + ```jsx - ``` + Returns true if the value is thruthful _For more complicated regular expressions (emoji, international characters) you can use [xregexp](https://github.com/slevithan/xregexp). See [this comment](https://github.com/christianalfoni/formsy-react/issues/407#issuecomment-266306783) for an example._ **isEmail** + ```jsx - + ``` + Return true if it is an email **isUrl** + ```jsx - + ``` + Return true if it is an url **isExisty** + ```jsx - + ``` + Returns true if the value is not undefined or null **isUndefined** + ```jsx - + ``` + Returns true if the value is the undefined **isEmptyString** + ```jsx - + ``` + Returns true if the value is an empty string **isTrue** + ```jsx - + ``` + Returns true if the value is the boolean true **isFalse** + ```jsx - + ``` + Returns true if the value is the boolean false **isAlpha** + ```jsx - + ``` + Returns true if string is only letters **isNumeric** + ```jsx - + ``` + Returns true if string only contains numbers. Examples: 42; -3.14 **isAlphanumeric** + ```jsx - + ``` + Returns true if string only contains letters or numbers **isInt** + ```jsx - + ``` + Returns true if string represents integer value. Examples: 42; -12; 0 **isFloat** + ```jsx - + ``` + Returns true if string represents float value. Examples: 42; -3.14; 1e3 **isWords** + ```jsx - + ``` + Returns true if string is only letters, including spaces and tabs **isSpecialWords** + ```jsx - + ``` + Returns true if string is only letters, including special letters (a-z,ú,ø,æ,å) **equals:value** + ```jsx - + ``` + Return true if the value from input component matches value passed (==). **equalsField:fieldName** + ```jsx - - + + ``` + Return true if the value from input component matches value passed (==). **isLength:length** + ```jsx - + ``` + Returns true if the value length is the equal. **minLength:length** + ```jsx - + ``` + Return true if the value is more or equal to argument. **Also returns true for an empty value.** If you want to get false, then you should use [`required`](#required) additionally. **maxLength:length** + ```jsx - + ``` + Return true if the value is less or equal to argument diff --git a/CHANGES.md b/CHANGES.md deleted file mode 100644 index 72a94734..00000000 --- a/CHANGES.md +++ /dev/null @@ -1,81 +0,0 @@ -This is the old CHANGES file. Please look at [releases](https://github.com/christianalfoni/formsy-react/releases) for latest changes. - -**0.8.0** - - Fixed bug where dynamic form elements gave "not mounted" error (Thanks @sdemjanenko) - - React is now a peer dependency (Thanks @snario) - - Dynamically updated values should now work with initial "undefined" value (Thanks @sdemjanenko) - - Validations are now dynamic. Change the prop and existing values are re-validated (thanks @bryannaegele) - - You can now set a "disabled" prop on the form and check "isFormDisabled()" in form elements - - Refactored some code and written a couple of tests - -**0.7.2**: - - isNumber validation now supports float (Thanks @hahahana) - - Form XHR calls now includes CSRF headers, if exists (Thanks @hahahana) - -**0.7.1** - - Fixed bug where external update of value on pristine form element did not update the form model (Thanks @sdemjanenko) - - Fixed bug where children are null/undefined (Thanks @sdemjanenko) - -**0.7.0** - - Dynamic form elements. Add them at any point and they will be registered with the form - - **onChange()** handler is called whenever an form element has changed its value or a new form element is added to the form - - isNumeric validator now also handles actual numbers, not only strings - - Some more tests - -**0.6.0** - - **onSubmit()** now has the same signature regardless of passing url attribute or not - - **isPristine()** is a new method to handle "touched" form elements (thanks @FoxxMD) - - Mapping attributes to pass a function that maps input values to new structure. The new structure is either passed to *onSubmit* and/or to the server when using a url attribute (thanks for feedback @MattAitchison) - - Added default "equalsField" validation rule - - Lots of tests! - -**0.5.2** - - Fixed bug with handlers in ajax requests (Thanks @smokku) - -**0.5.1** - - Fixed bug with empty validations - -**0.5.0** - - Added [cross input validation](#formsyaddvalidationrule) - - Fixed bug where validation rule refers to a string - - Added "invalidateForm" function when manually submitting the form - -**0.4.1** - - Fixed bug where form element is required, but no validations - -**0.4.0**: - - Possibility to handle form data manually using "onSubmit" - - Added two more default rules. *isWords* and *isSpecialWords* - -**0.3.0**: - - Deprecated everything related to buttons automatically added - - Added onValid and onInvalid handlers, use those to manipulate submit buttons etc. - -**0.2.3**: - - - Fixed bug where child does not have props property - -**0.2.2**: - - - Fixed bug with updating the props - -**0.2.1**: - - - Cancel button displays if onCancel handler is defined - -**0.2.0**: - - - Implemented hasValue() method - -**0.1.3**: - - - Fixed resetValue bug - -**0.1.2**: - - - Fixed isValue check to empty string, needs to support false and 0 - -**0.1.1**: - - - Added resetValue method - - Changed value check of showRequired diff --git a/README.md b/README.md index 65cacd14..7f45ac74 100644 --- a/README.md +++ b/README.md @@ -1,135 +1,131 @@ -formsy-react [![GitHub release](https://img.shields.io/github/release/christianalfoni/formsy-react.svg)](https://github.com/christianalfoni/formsy-react/releases) [![Build Status](https://travis-ci.org/christianalfoni/formsy-react.svg?branch=master)](https://travis-ci.org/christianalfoni/formsy-react) -============ +# formsy-react [![GitHub release](https://img.shields.io/github/release/christianalfoni/formsy-react.svg)](https://github.com/christianalfoni/formsy-react/releases) [![Build Status](https://travis-ci.org/christianalfoni/formsy-react.svg?branch=master)](https://travis-ci.org/christianalfoni/formsy-react) -A form input builder and validator for React JS +A form input builder and validator for React. -| [How to use](#how-to-use) | [API](/API.md) | [Examples](/examples) | -|---|---|---| +| [Quick Start](#quick-start) | [API](/API.md) | [Examples](/examples) | +| --------------------------- | -------------- | --------------------- | -## Background -I wrote an article on forms and validation with React JS, [Nailing that validation with React JS](http://christianalfoni.github.io/javascript/2014/10/22/nailing-that-validation-with-reactjs.html), the result of that was this extension. +## Background -The main concept is that forms, inputs and validation is done very differently across developers and projects. This extension to React JS aims to be that "sweet spot" between flexibility and reusability. +I wrote an article on forms and validation with React, [Nailing that validation with React JS](http://christianalfoni.github.io/javascript/2014/10/22/nailing-that-validation-with-reactjs.html), the result of that was this component. -## What you can do +The main concept is that forms, inputs, and validation are done very differently across developers and projects. This React component aims to be that “sweet spot” between flexibility and reusability. - 1. Build any kind of form element components. Not just traditional inputs, but anything you want and get that validation for free +## What You Can Do - 2. Add validation rules and use them with simple syntax - - 3. Use handlers for different states of your form. Ex. "onSubmit", "onError", "onValid" etc. - - 4. Pass external errors to the form to invalidate elements - - 5. You can dynamically add form elements to your form and they will register/unregister to the form - -## Default elements -You can look at examples in this repo or use the [formsy-react-components](https://github.com/twisty/formsy-react-components) project to use bootstrap with formsy-react, or use [formsy-material-ui](https://github.com/mbrookes/formsy-material-ui) to use [Material-UI](http://material-ui.com/) with formsy-react. +1. Build any kind of form element components. Not just traditional inputs, but anything you want, and get that validation for free +2. Add validation rules and use them with simple syntax +3. Use handlers for different states of your form. (`onError`, `onSubmit`, `onValid`, etc.) +4. Pass external errors to the form to invalidate elements (E.g. a response from a server) +5. Dynamically add form elements to your form and they will register/unregister to the form ## Install - 1. Download from this REPO and use globally (Formsy) or with requirejs - 2. Install with `npm install formsy-react` and use with browserify etc. - 3. Install with `bower install formsy-react` +`yarn add formsy-react react react-dom` and use with webpack, browserify, etc. -## Changes +## Quick Start -[Check out releases](https://github.com/christianalfoni/formsy-react/releases) +### 1. Build a Formsy element -[Older changes](CHANGES.md) +```jsx +// MyInput.js +import { withFormsy } from 'formsy-react'; +import React from 'react'; -## How to use +class MyInput extends React.Component { + constructor(props) { + super(props); + this.changeValue = this.changeValue.bind(this); + } -See [`examples` folder](/examples) for examples. [Codepen demo](http://codepen.io/semigradsky/pen/dYYpwv?editors=001). + changeValue(event) { + // setValue() will set the value of the component, which in + // turn will validate it and the rest of the form + // Important: Don't skip this step. This pattern is required + // for Formsy to work. + this.props.setValue(event.currentTarget.value); + } + + render() { + // An error message is returned only if the component is invalid + const errorMessage = this.props.getErrorMessage(); + + return ( +
+ + {errorMessage} +
+ ); + } +} + +export default withFormsy(MyInput); +``` -Complete API reference is available [here](/API.md). +`withFormsy` is a [Higher-Order Component](https://facebook.github.io/react/docs/higher-order-components.html) that exposes additional props to `MyInput`. See the [API](/API.md#withFormsy) documentation to view a complete list of the props. -#### Formsy gives you a form straight out of the box +### 2. Use your Formsy element ```jsx - import Formsy from 'formsy-react'; - - const MyAppForm = React.createClass({ - getInitialState() { - return { - canSubmit: false - } - }, - enableButton() { - this.setState({ - canSubmit: true - }); - }, - disableButton() { - this.setState({ - canSubmit: false - }); - }, - submit(model) { - someDep.saveEmail(model.email); - }, - render() { - return ( - - - - - ); - } - }); +import Formsy from 'formsy-react'; +import React from 'react'; +import MyInput from './MyInput'; + +export default class App extends React.Component { + constructor(props) { + super(props); + this.disableButton = this.disableButton.bind(this); + this.enableButton = this.enableButton.bind(this); + this.state = { canSubmit: false }; + } + + disableButton() { + this.setState({ canSubmit: false }); + } + + enableButton() { + this.setState({ canSubmit: true }); + } + + submit(model) { + fetch('http://example.com/', { + method: 'post', + body: JSON.stringify(model) + }); + } + + render() { + return ( + + + + + ); + } +} ``` -This code results in a form with a submit button that will run the `submit` method when the submit button is clicked with a valid email. The submit button is disabled as long as the input is empty ([required](/API.md#required)) or the value is not an email ([isEmail](/API.md#validators)). On validation error it will show the message: "This is not a valid email". +This code results in a form with a submit button that will run the `submit` method when the form is submitted with a valid email. The submit button is disabled as long as the input is empty ([required](/API.md#required)) and the value is not an email ([isEmail](/API.md#validators)). On validation error it will show the message: "This is not a valid email". -#### Building a form element (required) -```jsx - import Formsy from 'formsy-react'; +## Contribute - const MyOwnInput = React.createClass({ +- Fork repo +- `yarn` +- `yarn examples` runs the development server on `localhost:8080` +- `yarn test` runs the tests - // Add the Formsy Mixin - mixins: [Formsy.Mixin], +## Changelog - // setValue() will set the value of the component, which in - // turn will validate it and the rest of the form - changeValue(event) { - this.setValue(event.currentTarget.value); - }, - - render() { - // Set a specific className based on the validation - // state of this component. showRequired() is true - // when the value is empty and the required prop is - // passed to the input. showError() is true when the - // value typed is invalid - const className = this.showRequired() ? 'required' : this.showError() ? 'error' : null; - - // An error message is returned ONLY if the component is invalid - // or the server has returned an error message - const errorMessage = this.getErrorMessage(); - - return ( -
- - {errorMessage} -
- ); - } - }); -``` -The form element component is what gives the form validation functionality to whatever you want to put inside this wrapper. You do not have to use traditional inputs, it can be anything you want and the value of the form element can also be anything you want. As you can see it is very flexible, you just have a small API to help you identify the state of the component and set its value. - -## Related projects -- [formsy-material-ui](https://github.com/mbrookes/formsy-material-ui) - A formsy-react compatibility wrapper for [Material-UI](http://material-ui.com/) form components. -- [formsy-react-components](https://github.com/twisty/formsy-react-components) - A set of React JS components for use in a formsy-react form. -- ... -- Send PR for adding your project to this list! - -## Contribute -- Fork repo -- `npm install` -- `npm run examples` runs the development server on `localhost:8080` -- `npm test` runs the tests +[Check out releases](https://github.com/christianalfoni/formsy-react/releases) ## License diff --git a/bower.json b/bower.json deleted file mode 100644 index b4d7faa4..00000000 --- a/bower.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "formsy-react", - "version": "0.18.0", - "description": "A form input builder and validator for React JS", - "repository": { - "type": "git", - "url": "https://github.com/christianalfoni/formsy-react.git" - }, - "main": "src/main.js", - "license": "MIT", - "ignore": [ - "build/", - "Gulpfile.js" - ], - "dependencies": { - "react": "^0.14.7 || ^15.0.0" - }, - "keywords": [ - "react", - "form", - "forms", - "validation", - "react-component" - ] -} diff --git a/examples/.eslintrc b/examples/.eslintrc new file mode 100644 index 00000000..93c55315 --- /dev/null +++ b/examples/.eslintrc @@ -0,0 +1,10 @@ +{ + "env": { + "browser": true + }, + "extends": "eslint:recommended", + "rules": { + "react/jsx-filename-extension": 0, + "react/no-multi-comp": 0 + } +} diff --git a/examples/README.md b/examples/README.md index e542748c..8af62aac 100644 --- a/examples/README.md +++ b/examples/README.md @@ -29,7 +29,7 @@ If it is not helped try update your node.js and npm. 2. [**Custom Validation**](custom-validation) - One field with added validation rule (`Formsy.addValidationRule`) and one field with dynamically added validation and error messages. + One field with added validation rule (`addValidationRule`) and one field with dynamically added validation and error messages. 3. [**Reset Values**](reset-values) diff --git a/examples/components/Checkbox.js b/examples/components/Checkbox.js new file mode 100644 index 00000000..26c1b37e --- /dev/null +++ b/examples/components/Checkbox.js @@ -0,0 +1,48 @@ +import React from 'react'; +import { propTypes, withFormsy } from 'formsy-react'; + +class MyCheckbox extends React.Component { + constructor(props) { + super(props); + this.changeValue = this.changeValue.bind(this); + this.state = { + value: true, + }; + } + + changeValue(event) { + // setValue() will set the value of the component, which in + // turn will validate it and the rest of the form + this.props.setValue(event.target.checked) + } + + render() { + // Set a specific className based on the validation + // state of this component. showRequired() is true + // when the value is empty and the required prop is + // passed to the input. showError() is true when the + // value typed is invalid + const className = `form-group ${this.props.className} ${this.props.showRequired() ? 'required' : ''} ${this.props.showError() ? 'error' : ''}`; + const value = this.props.getValue(); + return ( +
+ + +
+ ); + } +} + +MyCheckbox.propTypes = { + ...propTypes, +}; + +export default withFormsy(MyCheckbox); diff --git a/examples/components/Input.js b/examples/components/Input.js index fd668344..03579fc8 100644 --- a/examples/components/Input.js +++ b/examples/components/Input.js @@ -1,44 +1,47 @@ import React from 'react'; -import Formsy from 'formsy-react'; +import { propTypes, withFormsy } from 'formsy-react'; -const MyInput = React.createClass({ - - // Add the Formsy Mixin - mixins: [Formsy.Mixin], +class MyInput extends React.Component { + constructor(props) { + super(props); + this.changeValue = this.changeValue.bind(this); + } - // setValue() will set the value of the component, which in - // turn will validate it and the rest of the form changeValue(event) { - this.setValue(event.currentTarget[this.props.type === 'checkbox' ? 'checked' : 'value']); - }, - render() { + // setValue() will set the value of the component, which in + // turn will validate it and the rest of the form + this.props.setValue(event.currentTarget[this.props.type === 'checkbox' ? 'checked' : 'value']); + } + render() { // Set a specific className based on the validation // state of this component. showRequired() is true // when the value is empty and the required prop is // passed to the input. showError() is true when the // value typed is invalid - const className = 'form-group' + (this.props.className || ' ') + - (this.showRequired() ? 'required' : this.showError() ? 'error' : ''); + const className = `form-group ${this.props.className} ${this.props.showRequired() ? 'required' : ''} ${this.props.showError() ? 'error' : ''}`; // An error message is returned ONLY if the component is invalid // or the server has returned an error message - const errorMessage = this.getErrorMessage(); + const errorMessage = this.props.getErrorMessage(); return (
{errorMessage}
); } -}); +} + +MyInput.propTypes = { + ...propTypes, +}; -export default MyInput; +export default withFormsy(MyInput); diff --git a/examples/components/MultiCheckboxSet.js b/examples/components/MultiCheckboxSet.js index 1b4c9cc2..31144932 100644 --- a/examples/components/MultiCheckboxSet.js +++ b/examples/components/MultiCheckboxSet.js @@ -1,5 +1,5 @@ import React from 'react'; -import Formsy from 'formsy-react'; +import { withFormsy } from 'formsy-react'; function contains(container, item, cmp) { for (const it of container) { @@ -10,18 +10,16 @@ function contains(container, item, cmp) { return false; } -const MyRadioGroup = React.createClass({ - mixins: [Formsy.Mixin], - getInitialState() { - return { value: [], cmp: (a, b) => a === b }; - }, +class MyRadioGroup extends React.Component { + state = { value: [], cmp: (a, b) => a === b }; + componentDidMount() { const value = this.props.value || []; - this.setValue(value); + this.props.setValue(value); this.setState({ value: value, cmp: this.props.cmp || this.state.cmp }); - }, + } - changeValue(value, event) { + changeValue = (value, event) => { const checked = event.currentTarget.checked; let newValue = []; @@ -31,14 +29,14 @@ const MyRadioGroup = React.createClass({ newValue = this.state.value.filter(it => !this.state.cmp(it, value)); } - this.setValue(newValue); + this.props.setValue(newValue); this.setState({ value: newValue }); - }, + } render() { const className = 'form-group' + (this.props.className || ' ') + - (this.showRequired() ? 'required' : this.showError() ? 'error' : ''); - const errorMessage = this.getErrorMessage(); + (this.props.showRequired() ? 'required' : this.props.showError() ? 'error' : ''); + const errorMessage = this.props.getErrorMessage(); const { name, title, items } = this.props; return ( @@ -61,6 +59,6 @@ const MyRadioGroup = React.createClass({ ); } -}); +} -export default MyRadioGroup; +export default withFormsy(MyRadioGroup); diff --git a/examples/components/RadioGroup.js b/examples/components/RadioGroup.js index 985e620e..b73829c2 100644 --- a/examples/components/RadioGroup.js +++ b/examples/components/RadioGroup.js @@ -1,24 +1,24 @@ import React from 'react'; -import Formsy from 'formsy-react'; +import { withFormsy } from 'formsy-react'; -const MyRadioGroup = React.createClass({ - mixins: [Formsy.Mixin], +class MyRadioGroup extends React.Component { + state = {}; componentDidMount() { const value = this.props.value; - this.setValue(value); + this.props.setValue(value); this.setState({ value }); - }, + } - changeValue(value) { - this.setValue(value); + changeValue = (value) => { + this.props.setValue(value); this.setState({ value }); - }, + } render() { const className = 'form-group' + (this.props.className || ' ') + - (this.showRequired() ? 'required' : this.showError() ? 'error' : ''); - const errorMessage = this.getErrorMessage(); + (this.props.showRequired() ? 'required' : this.props.showError() ? 'error' : ''); + const errorMessage = this.props.getErrorMessage(); const { name, title, items } = this.props; return ( @@ -40,7 +40,6 @@ const MyRadioGroup = React.createClass({ ); } +} -}); - -export default MyRadioGroup; +export default withFormsy(MyRadioGroup); diff --git a/examples/components/Select.js b/examples/components/Select.js index cf619be7..d6a4a39c 100644 --- a/examples/components/Select.js +++ b/examples/components/Select.js @@ -1,17 +1,15 @@ import React from 'react'; -import Formsy from 'formsy-react'; +import { withFormsy } from 'formsy-react'; -const MySelect = React.createClass({ - mixins: [Formsy.Mixin], - - changeValue(event) { - this.setValue(event.currentTarget.value); - }, +class MySelect extends React.Component { + changeValue = (event) => { + this.props.setValue(event.currentTarget.value); + } render() { const className = 'form-group' + (this.props.className || ' ') + - (this.showRequired() ? 'required' : this.showError() ? 'error' : ''); - const errorMessage = this.getErrorMessage(); + (this.props.showRequired() ? 'required' : this.props.showError() ? 'error' : ''); + const errorMessage = this.props.getErrorMessage(); const options = this.props.options.map((option, i) => (
); } -}); +} + +class DynamicInput extends React.Component { + constructor(props) { + super(props); + this.state = { validationType: 'time' }; + this.changeValidation = this.changeValidation.bind(this); + this.changeValue = this.changeValue.bind(this); + } -const DynamicInput = React.createClass({ - mixins: [Formsy.Mixin], - getInitialState() { - return { validationType: 'time' }; - }, - changeValue(event) { - this.setValue(event.currentTarget.value); - }, changeValidation(validationType) { this.setState({ validationType: validationType }); - this.setValue(this.getValue()); - }, - validate() { - const value = this.getValue(); - console.log(value, this.state.validationType); - return value ? validators[this.state.validationType].regexp.test(value) : true; - }, - getCustomErrorMessage() { - return this.showError() ? validators[this.state.validationType].message : ''; - }, + this.props.setValue(this.props.getValue()); + } + + changeValue(event) { + this.props.setValue(event.currentTarget.value); + } + render() { - const className = 'form-group' + (this.props.className || ' ') + (this.showRequired() ? 'required' : this.showError() ? 'error' : null); - const errorMessage = this.getCustomErrorMessage(); + const errorMessage = { + time: 'Not a valid time format', + decimal: "Not a valid decimal value", + binary: "Not a valid binary number" + } return ( -
+
- - {errorMessage} - + +
); } -}); +} + +DynamicInput.displayName = "dynamic input"; + +DynamicInput.propTypes = { + ...propTypes, +}; + +const FormsyDynamicInput = withFormsy(DynamicInput); + +class Validations extends React.Component { + constructor(props) { + super(props); + this.changeValidation = this.changeValidation.bind(this); + } -const Validations = React.createClass({ changeValidation(e) { this.props.changeValidation(e.target.value); - }, + } + render() { const { validationType } = this.props; return ( -
+
Validation Type
- Time + Time
- Decimal + Decimal
- Binary + Binary
); } -}); +} + +Validations.propTypes = { + changeValidation: PropTypes.func.isRequired, + validationType: PropTypes.string.isRequired, +}; -ReactDOM.render(, document.getElementById('example')); +ReactDOM.render(, document.getElementById('example')); diff --git a/examples/custom-validation/index.html b/examples/custom-validation/index.html index 1b28f437..5c0d7d08 100644 --- a/examples/custom-validation/index.html +++ b/examples/custom-validation/index.html @@ -8,7 +8,6 @@

Formsy React Examples / Custom Validation

- - \ No newline at end of file + diff --git a/examples/dynamic-form-fields/app.css b/examples/dynamic-form-fields/app.css index 803891fb..448f6515 100644 --- a/examples/dynamic-form-fields/app.css +++ b/examples/dynamic-form-fields/app.css @@ -9,7 +9,8 @@ } .field { - overflow: hidden; + display: flex; + align-items: center; } .many-fields .form-group { @@ -17,8 +18,5 @@ float: left; } .many-fields .remove-field { - margin-top: 30px; - margin-left: 8px; - display: inline-block; - text-decoration: none; + max-height: 2rem; } diff --git a/examples/dynamic-form-fields/app.js b/examples/dynamic-form-fields/app.js index 2159788a..5ada8759 100644 --- a/examples/dynamic-form-fields/app.js +++ b/examples/dynamic-form-fields/app.js @@ -1,6 +1,6 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import { Form } from 'formsy-react'; +import Formsy from 'formsy-react'; import MyInput from './../components/Input'; import MySelect from './../components/Select'; @@ -14,7 +14,7 @@ const Fields = props => { props.onRemove(pos); }; } - const foo = 'required'; + return (
{props.data.map((field, i) => ( @@ -46,7 +46,7 @@ const Fields = props => { /> ) } - X +
)) } @@ -54,36 +54,49 @@ const Fields = props => { ); }; -const App = React.createClass({ - getInitialState() { - return { fields: [], canSubmit: false }; - }, +class App extends React.Component { + constructor(props) { + super(props); + this.state = { fields: [], canSubmit: false }; + this.addField = this.addField.bind(this); + this.removeField = this.removeField.bind(this); + this.enableButton = this.enableButton.bind(this); + this.disableButton = this.disableButton.bind(this); + } + submit(data) { alert(JSON.stringify(data, null, 4)); - }, + } + addField(fieldData) { fieldData.validations = fieldData.validations.length ? fieldData.validations.reduce((a, b) => Object.assign({}, a, b)) : null; fieldData.id = Date.now(); this.setState({ fields: this.state.fields.concat(fieldData) }); - }, + } + removeField(pos) { const fields = this.state.fields; this.setState({ fields: fields.slice(0, pos).concat(fields.slice(pos+1)) }) - }, + } + enableButton() { this.setState({ canSubmit: true }); - }, + } + disableButton() { this.setState({ canSubmit: false }); - }, + } + render() { const { fields, canSubmit } = this.state; return (
-
- + JSON.stringify(a) === JSON.stringify(b)} items={[ {isEmail: true}, @@ -95,19 +108,27 @@ const App = React.createClass({ {maxLength: 7} ]} /> - - + + - -
+ + - +
); } -}); +} -ReactDOM.render(, document.getElementById('example')); +ReactDOM.render(, document.getElementById('example')); diff --git a/examples/dynamic-form-fields/index.html b/examples/dynamic-form-fields/index.html index d912f94f..bcaff913 100644 --- a/examples/dynamic-form-fields/index.html +++ b/examples/dynamic-form-fields/index.html @@ -8,7 +8,6 @@

Formsy React Examples / Dynamic Form Fields

- diff --git a/examples/login/app.js b/examples/login/app.js index dfa5de4f..bb2f8912 100644 --- a/examples/login/app.js +++ b/examples/login/app.js @@ -1,31 +1,38 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import { Form } from 'formsy-react'; +import Formsy from 'formsy-react'; import MyInput from './../components/Input'; -const App = React.createClass({ - getInitialState() { - return { canSubmit: false }; - }, +class App extends React.Component { + constructor(props) { + super(props); + this.state = { canSubmit: false }; + this.disableButton = this.disableButton.bind(this); + this.enableButton = this.enableButton.bind(this); + } + submit(data) { alert(JSON.stringify(data, null, 4)); - }, + } + enableButton() { this.setState({ canSubmit: true }); - }, + } + disableButton() { this.setState({ canSubmit: false }); - }, + } + render() { return ( -
- - + + + - + ); } -}); +} ReactDOM.render(, document.getElementById('example')); diff --git a/examples/login/index.html b/examples/login/index.html index 755fd78a..8ab14b8d 100644 --- a/examples/login/index.html +++ b/examples/login/index.html @@ -8,7 +8,6 @@

Formsy React Examples / Login

- - \ No newline at end of file + diff --git a/examples/reset-values/app.js b/examples/reset-values/app.js index d5deb8f4..374b4d89 100644 --- a/examples/reset-values/app.js +++ b/examples/reset-values/app.js @@ -1,7 +1,8 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import { Form } from 'formsy-react'; +import Formsy from 'formsy-react'; +import MyCheckbox from './../components/Checkbox'; import MyInput from './../components/Input'; import MySelect from './../components/Select'; @@ -11,19 +12,45 @@ const user = { hair: 'brown' }; -const App = React.createClass({ +const randomNames = ['Christian', 'Dmitry', 'Aesop']; +const randomFree = [true, false]; +const randomHair = ['brown', 'black', 'blonde', 'red']; + +class App extends React.Component { + constructor(props) { + super(props); + this.randomize = this.randomize.bind(this); + this.submit = this.submit.bind(this); + } + + randomize() { + const random = { + name: randomNames[Math.floor(Math.random()*randomNames.length)], + free: randomFree[Math.floor(Math.random()*randomFree.length)], + hair: randomHair[Math.floor(Math.random()*randomHair.length)], + }; + + this.form.reset(random); + } + submit(data) { alert(JSON.stringify(data, null, 4)); - }, - resetForm() { - this.refs.form.reset(); - }, + } + render() { return ( - + this.form = c} + onSubmit={this.submit} + onReset={this.reset} + className="form" + > - - +
- + +
-
+ ); } -}); +} -ReactDOM.render(, document.getElementById('example')); +ReactDOM.render(, document.getElementById('example')); diff --git a/examples/reset-values/index.html b/examples/reset-values/index.html index 036a23ab..309c3256 100644 --- a/examples/reset-values/index.html +++ b/examples/reset-values/index.html @@ -8,7 +8,6 @@

Formsy React Examples / Reset Values

- diff --git a/examples/webpack.config.js b/examples/webpack.config.js index 06bbc10c..a5183ccc 100644 --- a/examples/webpack.config.js +++ b/examples/webpack.config.js @@ -1,49 +1,41 @@ -var fs = require('fs'); -var path = require('path'); -var webpack = require('webpack'); +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); function isDirectory(dir) { return fs.lstatSync(dir).isDirectory(); } module.exports = { - devtool: 'inline-source-map', - - entry: fs.readdirSync(__dirname).reduce(function (entries, dir) { - var isDraft = dir.charAt(0) === '_' || dir.indexOf('components') >= 0; - + entry: fs.readdirSync(__dirname).reduce((entries, dir) => { + const isDraft = dir.charAt(0) === '_' || dir.indexOf('components') >= 0; if (!isDraft && isDirectory(path.join(__dirname, dir))) { entries[dir] = path.join(__dirname, dir, 'app.js'); } - return entries; }, {}), - output: { - path: 'examples/__build__', + path: path.resolve(__dirname, 'examples/__build__'), filename: '[name].js', chunkFilename: '[id].chunk.js', - publicPath: '/__build__/' + publicPath: '/__build__/', }, - module: { - loaders: [ - { test: /\.js$/, exclude: /node_modules/, loader: 'babel' } - ] + loaders: [{ + test: /\.js$/, + exclude: /node_modules/, + loader: 'babel-loader', + }], }, - resolve: { alias: { - 'formsy-react': '../../src/main' - } + 'formsy-react': '../../src/index', + }, }, - plugins: [ - new webpack.optimize.CommonsChunkPlugin('shared.js'), new webpack.DefinePlugin({ - 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development') - }) - ] - + 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'), + }), + ], }; diff --git a/package.json b/package.json index 0c555896..6cd8ed5a 100644 --- a/package.json +++ b/package.json @@ -1,49 +1,61 @@ { "name": "formsy-react", - "version": "0.19.5", - "description": "A form input builder and validator for React JS", + "version": "1.0.0", + "description": "A form input builder and validator for React", + "keywords": [ + "form", + "forms", + "formsy", + "react", + "react-component", + "validation" + ], + "license": "MIT", + "homepage": "https://github.com/christianalfoni/formsy-react", + "bugs": "https://github.com/christianalfoni/formsy-react/issues", "repository": { "type": "git", "url": "https://github.com/christianalfoni/formsy-react.git" }, - "main": "lib/main.js", + "author": "Christian Alfoni", + "files": [ + "lib" + ], + "main": "lib/index.js", "scripts": { - "build": "NODE_ENV=production webpack -p --config webpack.production.config.js", - "test": "babel-node testrunner", + "build": "NODE_ENV=production webpack -p --config webpack.config.js && yarn run prepublish", "examples": "webpack-dev-server --config examples/webpack.config.js --content-base examples", - "prepublish": "babel ./src/ -d ./lib/" + "lint": "eslint src/**/*.js", + "prepublish": "rm -Rf ./lib && babel ./src/ -d ./lib/", + "test": "babel-node testrunner" }, - "author": "Christian Alfoni", - "license": "MIT", - "keywords": [ - "react", - "form", - "forms", - "validation", - "react-component" - ], "dependencies": { - "form-data-to-object": "^0.2.0" + "form-data-to-object": "^0.2.0", + "prop-types": "^15.5.10" }, "devDependencies": { - "babel-cli": "^6.6.5", - "babel-loader": "^6.2.4", - "babel-preset-es2015": "^6.6.0", - "babel-preset-react": "^6.5.0", - "babel-preset-stage-2": "^6.5.0", - "create-react-class": "^15.6.0", - "jsdom": "^6.5.1", - "nodeunit": "^0.9.1", - "prop-types": "^15.5.10", - "react": "^15.0.0", - "react-addons-pure-render-mixin": "^15.0.0", - "react-addons-test-utils": "^15.0.0", - "react-dom": "^15.0.0", - "sinon": "^1.17.3", - "webpack": "^1.12.14", - "webpack-dev-server": "^1.14.1" + "babel-cli": "^6.24.1", + "babel-loader": "^7.1.1", + "babel-preset-es2015": "^6.24.1", + "babel-preset-react": "^6.24.1", + "babel-preset-stage-2": "^6.24.1", + "eslint": "^3.19.0 || ^4.3.0", + "eslint-config-airbnb": "^15.1.0", + "eslint-plugin-import": "^2.7.0", + "eslint-plugin-jsx-a11y": "^5.1.1", + "eslint-plugin-react": "^7.1.0", + "jsdom": "^11.1.0", + "nodeunit": "^0.11.1", + "react": "^15.6.1", + "react-addons-pure-render-mixin": "^15.6.0", + "react-addons-test-utils": "^15.6.0", + "react-dom": "^15.6.1", + "sinon": "^3.2.0", + "webpack": "^3.5.4", + "webpack-dev-server": "^2.7.1" }, "peerDependencies": { - "react": "^0.14.0 || ^15.0.0" + "react": "^15.6.1", + "react-dom": "^15.6.1" } } diff --git a/release/formsy-react.js b/release/formsy-react.js index 4ade308d..6c3255c0 100644 --- a/release/formsy-react.js +++ b/release/formsy-react.js @@ -1,7 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react")):"function"==typeof define&&define.amd?define(["react"],e):"object"==typeof exports?exports.Formsy=e(require("react")):t.Formsy=e(t.react)}(this,function(t){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){(function(e){"use strict";function r(t,e){var n={};for(var r in t)e.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}var i=Object.assign||function(t){for(var e=1;e0&&this.setInputValidationErrors(this.props.validationErrors);var t=this.inputs.map(function(t){return t.props.name});f.arraysDiffer(this.prevInputNames,t)&&this.validateForm()},reset:function(t){this.setFormPristine(!0),this.resetModel(t)},submit:function(t){t&&t.preventDefault(),this.setFormPristine(!1);var e=this.getModel();this.props.onSubmit(e,this.resetModel,this.updateInputsWithError),this.state.isValid?this.props.onValidSubmit(e,this.resetModel,this.updateInputsWithError):this.props.onInvalidSubmit(e,this.resetModel,this.updateInputsWithError)},mapModel:function(t){return this.props.mapping?this.props.mapping(t):p.toObj(Object.keys(t).reduce(function(e,n){for(var r=n.split("."),i=e;r.length;){var o=r.shift();i=i[o]=r.length?i[o]||{}:t[n]}return e},{}))},getModel:function(){var t=this.getCurrentValues();return this.mapModel(t)},resetModel:function(t){this.inputs.forEach(function(e){var n=e.props.name;t&&t.hasOwnProperty(n)?e.setValue(t[n]):e.resetValue()}),this.validateForm()},setInputValidationErrors:function(t){this.inputs.forEach(function(e){var n=e.props.name,r=[{_isValid:!(n in t),_validationError:"string"==typeof t[n]?[t[n]]:t[n]}];e.setState.apply(e,r)})},isChanged:function(){return!f.isSame(this.getPristineValues(),this.getCurrentValues())},getPristineValues:function(){return this.inputs.reduce(function(t,e){var n=e.props.name;return t[n]=e.props.value,t},{})},updateInputsWithError:function(t){var e=this;Object.keys(t).forEach(function(n,r){var i=f.find(e.inputs,function(t){return t.props.name===n});if(!i)throw new Error("You are trying to update an input that does not exist. Verify errors object with input names. "+JSON.stringify(t));var o=[{_isValid:e.props.preventExternalInvalidation||!1,_externalError:"string"==typeof t[n]?[t[n]]:t[n]}];i.setState.apply(i,o)})},isFormDisabled:function(){return this.props.disabled},getCurrentValues:function(){return this.inputs.reduce(function(t,e){var n=e.props.name;return t[n]=e.state._value,t},{})},setFormPristine:function(t){this.setState({_formSubmitted:!t}),this.inputs.forEach(function(e,n){e.setState({_formSubmitted:!t,_isPristine:t})})},validate:function(t){this.state.canChange&&this.props.onChange(this.getCurrentValues(),this.isChanged());var e=this.runValidation(t);t.setState({_isValid:e.isValid,_isRequired:e.isRequired,_validationError:e.error,_externalError:null},this.validateForm)},runValidation:function(t,e){var n=this.getCurrentValues(),r=t.props.validationErrors,i=t.props.validationError;e=2===arguments.length?e:t.state._value;var o=this.runRules(e,n,t._validations),s=this.runRules(e,n,t._requiredValidations);"function"==typeof t.validate&&(o.failed=t.validate()?[]:["failed"]);var a=!!Object.keys(t._requiredValidations).length&&!!s.success.length,u=!(o.failed.length||this.props.validationErrors&&this.props.validationErrors[t.props.name]);return{isRequired:a,isValid:!a&&u,error:function(){if(u&&!a)return v;if(o.errors.length)return o.errors;if(this.props.validationErrors&&this.props.validationErrors[t.props.name])return"string"==typeof this.props.validationErrors[t.props.name]?[this.props.validationErrors[t.props.name]]:this.props.validationErrors[t.props.name];if(a){var e=r[s.success[0]];return e?[e]:null}return o.failed.length?o.failed.map(function(t){return r[t]?r[t]:i}).filter(function(t,e,n){return n.indexOf(t)===e}):void 0}.call(this)}},runRules:function(t,e,n){var r={errors:[],failed:[],success:[]};return Object.keys(n).length&&Object.keys(n).forEach(function(i){if(l[i]&&"function"==typeof n[i])throw new Error("Formsy does not allow you to override default validations: "+i);if(!l[i]&&"function"!=typeof n[i])throw new Error("Formsy does not have the validation rule: "+i);if("function"==typeof n[i]){var o=n[i](e,t);return void("string"==typeof o?(r.errors.push(o),r.failed.push(i)):o||r.failed.push(i))}if("function"!=typeof n[i]){var o=l[i](e,t,n[i]);return void("string"==typeof o?(r.errors.push(o),r.failed.push(i)):o?r.success.push(i):r.failed.push(i))}return r.success.push(i)}),r},validateForm:function(){var t=this,e=function(){var t=this.inputs.every(function(t){return t.state._isValid});this.setState({isValid:t}),t?this.props.onValid():this.props.onInvalid(),this.setState({canChange:!0})}.bind(this);this.inputs.forEach(function(n,r){var i=t.runValidation(n);i.isValid&&n.state._externalError&&(i.isValid=!1),n.setState({_isValid:i.isValid,_isRequired:i.isRequired,_validationError:i.error,_externalError:!i.isValid&&n.state._externalError?n.state._externalError:null},r===t.inputs.length-1?e:null)}),this.inputs.length||this.setState({canChange:!0})},attachToForm:function(t){this.inputs.indexOf(t)===-1&&this.inputs.push(t),this.validate(t)},detachFromForm:function(t){var e=this.inputs.indexOf(t);e!==-1&&(this.inputs=this.inputs.slice(0,e).concat(this.inputs.slice(e+1))),this.validateForm()},render:function(){var t=this.props,e=(t.mapping,t.validationErrors,t.onSubmit,t.onValid,t.onValidSubmit,t.onInvalid,t.onInvalidSubmit,t.onChange,t.reset,t.preventExternalInvalidation,t.onSuccess,t.onError,r(t,["mapping","validationErrors","onSubmit","onValid","onValidSubmit","onInvalid","onInvalidSubmit","onChange","reset","preventExternalInvalidation","onSuccess","onError"]));return a.createElement("form",i({},e,{onSubmit:this.submit}),this.props.children)}}),e.exports||e.module||e.define&&e.define.amd||(e.Formsy=c),t.exports=c}).call(e,function(){return this}())},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function i(t){if(l===setTimeout)return setTimeout(t,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function o(t){if(p===clearTimeout)return clearTimeout(t);if((p===r||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(t);try{return p(t)}catch(e){try{return p.call(null,t)}catch(e){return p.call(this,t)}}}function s(){m&&d&&(m=!1,d.length?h=d.concat(h):y=-1,h.length&&a())}function a(){if(!m){var t=i(s);m=!0;for(var e=h.length;e;){for(d=h,h=[];++y1)for(var n=1;n1)throw new Error("Formsy does not support multiple args on string validations. Use object format of validations instead.");return t[r]=!n.length||n[0],t},{}):t||{}});t.exports={getInitialState:function(){return{_value:this.props.value,_isRequired:!1,_isValid:!0,_isPristine:!0,_pristineValue:this.props.value,_validationError:[],_externalError:null,_formSubmitted:!1}},contextTypes:{formsy:r.object},getDefaultProps:function(){return{validationError:"",validationErrors:{}}},componentWillMount:function(){var t=function(){this.setValidations(this.props.validations,this.props.required),this.context.formsy.attachToForm(this)}.bind(this);if(!this.props.name)throw new Error("Form Input requires a name property when used");t()},componentWillReceiveProps:function(t){this.setValidations(t.validations,t.required)},componentDidUpdate:function(t){i.isSame(this.props.value,t.value)||this.setValue(this.props.value),i.isSame(this.props.validations,t.validations)&&i.isSame(this.props.required,t.required)||this.context.formsy.validate(this)},componentWillUnmount:function(){this.context.formsy.detachFromForm(this)},setValidations:function(t,e){this._validations=o(t)||{},this._requiredValidations=e===!0?{isDefaultRequiredValue:!0}:o(e)},setValue:function(t){this.setState({_value:t,_isPristine:!1},function(){this.context.formsy.validate(this)}.bind(this))},resetValue:function(){this.setState({_value:this.state._pristineValue,_isPristine:!0},function(){this.context.formsy.validate(this)})},getValue:function(){return this.state._value},hasValue:function(){return""!==this.state._value},getErrorMessage:function(){var t=this.getErrorMessages();return t.length?t[0]:null},getErrorMessages:function(){return!this.isValid()||this.showRequired()?this.state._externalError||this.state._validationError||[]:[]},isFormDisabled:function(){return this.context.formsy.isFormDisabled()},isValid:function(){return this.state._isValid},isPristine:function(){return this.state._isPristine},isFormSubmitted:function(){return this.state._formSubmitted},isRequired:function(){return!!this.props.required},showRequired:function(){return this.state._isRequired},showError:function(){return!this.showRequired()&&!this.isValid()},isValidValue:function(t){return this.context.formsy.isValidValue.call(null,this,t)}}}).call(e,function(){return this}())},function(t,e,n){"use strict";var r=n(2),i=n(14);if("undefined"==typeof r)throw Error("create-react-class could not find the React object. If you are using script tags, make sure that React is being loaded before create-react-class.");var o=(new r.Component).updater;t.exports=i(r.Component,r.isValidElement,o)},function(t,e){"use strict";function n(t){return function(){return t}}var r=function(){};r.thatReturns=n,r.thatReturnsFalse=n(!1),r.thatReturnsTrue=n(!0),r.thatReturnsNull=n(null),r.thatReturnsThis=function(){return this},r.thatReturnsArgument=function(t){return t},t.exports=r},function(t,e,n){(function(e){"use strict";var r=n(6),i=r;"production"!==e.env.NODE_ENV&&!function(){var t=function(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r2?r-2:0),o=2;o=i}};t.exports=i},function(t,e,n){(function(e){"use strict";function r(t){return t}function i(t,n,i){function p(t,n,r){for(var i in n)n.hasOwnProperty(i)&&"production"!==e.env.NODE_ENV&&u("function"==typeof n[i],"%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.",t.displayName||"ReactClass",c[r],i)}function f(t,e){var n=D.hasOwnProperty(e)?D[e]:null;V.hasOwnProperty(e)&&a("OVERRIDE_BASE"===n,"ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.",e),t&&a("DEFINE_MANY"===n||"DEFINE_MANY_MERGED"===n,"ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.",e)}function d(t,r){if(r){a("function"!=typeof r,"ReactClass: You're attempting to use a component class or function as a mixin. Instead, just use a regular object."),a(!n(r),"ReactClass: You're attempting to use a component as a mixin. Instead, just use a regular object.");var i=t.prototype,o=i.__reactAutoBindPairs;r.hasOwnProperty(l)&&x.mixins(t,r.mixins);for(var s in r)if(r.hasOwnProperty(s)&&s!==l){var c=r[s],p=i.hasOwnProperty(s);if(f(p,s),x.hasOwnProperty(s))x[s](t,c);else{var d=D.hasOwnProperty(s),h="function"==typeof c,m=h&&!d&&!p&&r.autobind!==!1;if(m)o.push(s,c),i[s]=c;else if(p){var F=D[s];a(d&&("DEFINE_MANY_MERGED"===F||"DEFINE_MANY"===F),"ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.",F,s),"DEFINE_MANY_MERGED"===F?i[s]=y(i[s],c):"DEFINE_MANY"===F&&(i[s]=v(i[s],c))}else i[s]=c,"production"!==e.env.NODE_ENV&&"function"==typeof c&&r.displayName&&(i[s].displayName=r.displayName+"_"+s)}}}else if("production"!==e.env.NODE_ENV){var E=typeof r,g="object"===E&&null!==r;"production"!==e.env.NODE_ENV&&u(g,"%s: You're attempting to include a mixin that is either null or not an object. Check the mixins included by the component, as well as any mixins they include themselves. Expected object but got %s.",t.displayName||"ReactClass",null===r?null:E)}}function h(t,e){if(e)for(var n in e){var r=e[n];if(e.hasOwnProperty(n)){var i=n in x;a(!i,'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\'t be on the "statics" key. Define it as an instance property instead; it will still be accessible on the constructor.',n);var o=n in t;a(!o,"ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.",n),t[n]=r}}}function m(t,e){a(t&&e&&"object"==typeof t&&"object"==typeof e,"mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.");for(var n in e)e.hasOwnProperty(n)&&(a(void 0===t[n],"mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.",n),t[n]=e[n]);return t}function y(t,e){return function(){var n=t.apply(this,arguments),r=e.apply(this,arguments);if(null==n)return r;if(null==r)return n;var i={};return m(i,n),m(i,r),i}}function v(t,e){return function(){t.apply(this,arguments),e.apply(this,arguments)}}function F(t,n){var r=n.bind(t);if("production"!==e.env.NODE_ENV){r.__reactBoundContext=t,r.__reactBoundMethod=n,r.__reactBoundArguments=null;var i=t.constructor.displayName,o=r.bind;r.bind=function(s){for(var a=arguments.length,c=Array(a>1?a-1:0),l=1;l=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.withFormsy=t.propTypes=t.addValidationRule=void 0;var u=Object.assign||function(e){for(var t=1;t0&&this.setInputValidationErrors(this.props.validationErrors);var e=this.inputs.map(function(e){return e.props.name});b.default.arraysDiffer(this.prevInputNames,e)&&this.validateForm()}},{key:"attachToForm",value:function(e){-1===this.inputs.indexOf(e)&&this.inputs.push(e),this.validate(e)}},{key:"detachFromForm",value:function(e){var t=this.inputs.indexOf(e);-1!==t&&(this.inputs=this.inputs.slice(0,t).concat(this.inputs.slice(t+1))),this.validateForm()}},{key:"getCurrentValues",value:function(){return this.inputs.reduce(function(e,t){var r=t.props.name,n=Object.assign({},e);return n[r]=t.state.value,n},{})}},{key:"getModel",value:function(){var e=this.getCurrentValues();return this.mapModel(e)}},{key:"getPristineValues",value:function(){return this.inputs.reduce(function(e,t){var r=t.props.name,n=Object.assign({},e);return n[r]=t.props.value,n},{})}},{key:"isChanged",value:function(){return!b.default.isSame(this.getPristineValues(),this.getCurrentValues())}},{key:"isFormDisabled",value:function(){return this.props.disabled}},{key:"mapModel",value:function(e){return this.props.mapping?this.props.mapping(e):c.default.toObj(Object.keys(e).reduce(function(t,r){for(var n=r.split("."),i=t;n.length;){var o=n.shift();i[o]=n.length?i[o]||{}:e[r],i=i[o]}return t},{}))}},{key:"reset",value:function(e){this.setFormPristine(!0),this.resetModel(e)}},{key:"resetModel",value:function(e){this.inputs.forEach(function(t){var r=t.props.name;e&&Object.prototype.hasOwnProperty.call(e,r)?t.setValue(e[r]):t.resetValue()}),this.validateForm()}},{key:"runValidation",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.state.value,n=this.getCurrentValues(),i=e.props.validationErrors,o=e.props.validationError,a=b.default.runRules(r,n,e.validations,V.default),s=b.default.runRules(r,n,e.requiredValidations,V.default),u=!!Object.keys(e.requiredValidations).length&&!!s.success.length,l=!(a.failed.length||this.props.validationErrors&&this.props.validationErrors[e.props.name]);return{isRequired:u,isValid:!u&&l,error:function(){if(l&&!u)return[];if(a.errors.length)return a.errors;if(t.props.validationErrors&&t.props.validationErrors[e.props.name])return"string"==typeof t.props.validationErrors[e.props.name]?[t.props.validationErrors[e.props.name]]:t.props.validationErrors[e.props.name];if(u){var r=i[s.success[0]];return r?[r]:null}return a.failed.length?a.failed.map(function(e){return i[e]?i[e]:o}).filter(function(e,t,r){return r.indexOf(e)===t}):void 0}()}}},{key:"setInputValidationErrors",value:function(e){this.inputs.forEach(function(t){var r=t.props.name,n=[{isValid:!(r in e),validationError:"string"==typeof e[r]?[e[r]]:e[r]}];t.setState.apply(t,n)})}},{key:"setFormPristine",value:function(e){this.setState({formSubmitted:!e}),this.inputs.forEach(function(t){t.setState({formSubmitted:!e,isPristine:e})})}},{key:"submit",value:function(e){e&&e.preventDefault&&e.preventDefault(),this.setFormPristine(!1);var t=this.getModel();this.props.onSubmit(t,this.resetModel,this.updateInputsWithError),this.state.isValid?this.props.onValidSubmit(t,this.resetModel,this.updateInputsWithError):this.props.onInvalidSubmit(t,this.resetModel,this.updateInputsWithError)}},{key:"updateInputsWithError",value:function(e){var t=this;Object.keys(e).forEach(function(r){var n=b.default.find(t.inputs,function(e){return e.props.name===r});if(!n)throw new Error("You are trying to update an input that does not exist. Verify errors object with input names. "+JSON.stringify(e));var i=[{isValid:t.props.preventExternalInvalidation,externalError:"string"==typeof e[r]?[e[r]]:e[r]}];n.setState.apply(n,i)})}},{key:"validate",value:function(e){this.state.canChange&&this.props.onChange(this.getCurrentValues(),this.isChanged());var t=this.runValidation(e);e.setState({isValid:t.isValid,isRequired:t.isRequired,validationError:t.error,externalError:null},this.validateForm)}},{key:"validateForm",value:function(){var e=this,t=function(){var t=e.inputs.every(function(e){return e.state.isValid});e.setState({isValid:t}),t?e.props.onValid():e.props.onInvalid(),e.setState({canChange:!0})};this.inputs.forEach(function(r,n){var i=e.runValidation(r);i.isValid&&r.state.externalError&&(i.isValid=!1),r.setState({isValid:i.isValid,isRequired:i.isRequired,validationError:i.error,externalError:!i.isValid&&r.state.externalError?r.state.externalError:null},n===e.inputs.length-1?t:null)}),this.inputs.length||this.setState({canChange:!0})}},{key:"render",value:function(){var e=this.props,t=(e.getErrorMessage,e.getErrorMessages,e.getValue,e.hasValue,e.isFormDisabled,e.isFormSubmitted,e.isPristine,e.isRequired,e.isValid,e.isValidValue,e.mapping,e.onChange,e.onInvalidSubmit,e.onInvalid,e.onSubmit,e.onValid,e.onValidSubmit,e.preventExternalInvalidation,e.resetValue,e.setValidations,e.setValue,e.showError,e.showRequired,e.validationErrors,i(e,["getErrorMessage","getErrorMessages","getValue","hasValue","isFormDisabled","isFormSubmitted","isPristine","isRequired","isValid","isValidValue","mapping","onChange","onInvalidSubmit","onInvalid","onSubmit","onValid","onValidSubmit","preventExternalInvalidation","resetValue","setValidations","setValue","showError","showRequired","validationErrors"]));return m.default.createElement("form",u({onSubmit:this.submit},t),this.props.children)}}]),t}(m.default.Component);O.displayName="Formsy",O.defaultProps={children:null,disabled:!1,getErrorMessage:function(){},getErrorMessages:function(){},getValue:function(){},hasValue:function(){},isFormDisabled:function(){},isFormSubmitted:function(){},isPristine:function(){},isRequired:function(){},isValid:function(){},isValidValue:function(){},mapping:null,onChange:function(){},onError:function(){},onInvalid:function(){},onInvalidSubmit:function(){},onSubmit:function(){},onValid:function(){},onValidSubmit:function(){},preventExternalInvalidation:!1,resetValue:function(){},setValidations:function(){},setValue:function(){},showError:function(){},showRequired:function(){},validationErrors:null},O.propTypes={children:h.default.node,disabled:h.default.bool,getErrorMessage:h.default.func,getErrorMessages:h.default.func,getValue:h.default.func,hasValue:h.default.func,isFormDisabled:h.default.func,isFormSubmitted:h.default.func,isPristine:h.default.func,isRequired:h.default.func,isValid:h.default.func,isValidValue:h.default.func,mapping:h.default.object,preventExternalInvalidation:h.default.bool,onChange:h.default.func,onInvalid:h.default.func,onInvalidSubmit:h.default.func,onSubmit:h.default.func,onValid:h.default.func,onValidSubmit:h.default.func,resetValue:h.default.func,setValidations:h.default.func,setValue:h.default.func,showError:h.default.func,showRequired:h.default.func,validationErrors:h.default.object},O.childContextTypes={formsy:h.default.object};var F=function(e,t){V.default[e]=t},w=S.default;t.addValidationRule=F,t.propTypes=E.propTypes,t.withFormsy=w,t.default=O},function(e,t){function r(e){return Object.keys(e).reduce(function(t,r){var n=r.match(/[^\[]*/i),i=r.match(/\[.*?\]/g)||[];i=[n[0]].concat(i).map(function(e){return e.replace(/\[|\]/g,"")});for(var o=t;i.length;){var a=i.shift();a in o?o=o[a]:(o[a]=i.length?isNaN(i[0])?{}:[]:e[r],o=o[a])}return t},{})}function n(e){function t(e,r,n){return Array.isArray(n)||"[object Object]"===Object.prototype.toString.call(n)?(Object.keys(n).forEach(function(i){t(e,r+"["+i+"]",n[i])}),e):(e[r]=n,e)}return Object.keys(e).reduce(function(r,n){return t(r,n,e[n])},{})}e.exports={fromObj:n,toObj:r}},function(e,t,r){"use strict";var n=r(6),i=r(7),o=r(8);e.exports=function(){function e(e,t,r,n,a,s){s!==o&&i(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types")}function t(){return e}e.isRequired=e;var r={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t};return r.checkPropTypes=n,r.PropTypes=r,r}},function(e,t,r){"use strict";function n(e){return function(){return e}}var i=function(){};i.thatReturns=n,i.thatReturnsFalse=n(!1),i.thatReturnsTrue=n(!0),i.thatReturnsNull=n(null),i.thatReturnsThis=function(){return this},i.thatReturnsArgument=function(e){return e},e.exports=i},function(e,t,r){"use strict";function n(e,t,r,n,o,a,s,u){if(i(t),!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var f=[r,n,o,a,s,u],d=0;l=new Error(t.replace(/%s/g,function(){return f[d++]})),l.name="Invariant Violation"}throw l.framesToPop=1,l}}var i=function(e){};e.exports=n},function(e,t,r){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){return null!==e&&void 0!==e},i=function(e){return""===e},o={isDefaultRequiredValue:function(e,t){return void 0===t||""===t},isExisty:function(e,t){return n(t)},matchRegexp:function(e,t,r){return!n(t)||i(t)||r.test(t)},isUndefined:function(e,t){return void 0===t},isEmptyString:function(e,t){return i(t)},isEmail:function(e,t){return o.matchRegexp(e,t,/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i)},isUrl:function(e,t){return o.matchRegexp(e,t,/^(?:\w+:)?\/\/([^\s.]+\.\S{2}|localhost[:?\d]*)\S*$/i)},isTrue:function(e,t){return!0===t},isFalse:function(e,t){return!1===t},isNumeric:function(e,t){return"number"==typeof t||o.matchRegexp(e,t,/^[-+]?(?:\d*[.])?\d+$/)},isAlpha:function(e,t){return o.matchRegexp(e,t,/^[A-Z]+$/i)},isAlphanumeric:function(e,t){return o.matchRegexp(e,t,/^[0-9A-Z]+$/i)},isInt:function(e,t){return o.matchRegexp(e,t,/^(?:[-+]?(?:0|[1-9]\d*))$/)},isFloat:function(e,t){return o.matchRegexp(e,t,/^(?:[-+]?(?:\d+))?(?:\.\d*)?(?:[eE][+-]?(?:\d+))?$/)},isWords:function(e,t){return o.matchRegexp(e,t,/^[A-Z\s]+$/i)},isSpecialWords:function(e,t){return o.matchRegexp(e,t,/^[A-Z\s\u00C0-\u017F]+$/i)},isLength:function(e,t,r){return!n(t)||i(t)||t.length===r},equals:function(e,t,r){return!n(t)||i(t)||t===r},equalsField:function(e,t,r){return t===e[r]},maxLength:function(e,t,r){return!n(t)||t.length<=r},minLength:function(e,t,r){return!n(t)||i(t)||t.length>=r}};t.default=o},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.propTypes=void 0;var s=Object.assign||function(e){for(var t=1;t1)throw new Error("Formsy does not support multiple args on string validations. Use object format of validations instead.");var i=Object.assign({},e);return i[n]=!r.length||r[0],i},{}):e||{}},m={innerRef:f.default.func,name:f.default.string.isRequired,required:f.default.bool,validations:f.default.oneOfType([f.default.object,f.default.string]),value:f.default.string};t.propTypes=m,t.default=function(e){var t=function(t){function r(e){i(this,r);var t=o(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return t.state={value:e.value,isRequired:!1,isValid:!0,isPristine:!0,pristineValue:e.value,validationError:[],externalError:null,formSubmitted:!1},t.getErrorMessage=t.getErrorMessage.bind(t),t.getErrorMessages=t.getErrorMessages.bind(t),t.getValue=t.getValue.bind(t),t.isFormDisabled=t.isFormDisabled.bind(t),t.isPristine=t.isPristine.bind(t),t.isRequired=t.isRequired.bind(t),t.isValid=t.isValid.bind(t),t.resetValue=t.resetValue.bind(t),t.setValue=t.setValue.bind(t),t.showRequired=t.showRequired.bind(t),t}return a(r,t),u(r,[{key:"componentWillMount",value:function(){var e=this;if(!this.props.name)throw new Error("Form Input requires a name property when used");!function(){e.setValidations(e.props.validations,e.props.required),e.context.formsy.attachToForm(e)}()}},{key:"componentWillReceiveProps",value:function(e){this.setValidations(e.validations,e.required)}},{key:"componentDidUpdate",value:function(e){h.default.isSame(this.props.value,e.value)||this.setValue(this.props.value),h.default.isSame(this.props.validations,e.validations)&&h.default.isSame(this.props.required,e.required)||this.context.formsy.validate(this)}},{key:"componentWillUnmount",value:function(){this.context.formsy.detachFromForm(this)}},{key:"getErrorMessage",value:function(){var e=this.getErrorMessages();return e.length?e[0]:null}},{key:"getErrorMessages",value:function(){return!this.isValid()||this.showRequired()?this.state.externalError||this.state.validationError||[]:[]}},{key:"getValue",value:function(){return this.state.value}},{key:"hasValue",value:function(){return""!==this.state.value}},{key:"isFormDisabled",value:function(){return this.context.formsy.isFormDisabled()}},{key:"isFormSubmitted",value:function(){return this.state.formSubmitted}},{key:"isPristine",value:function(){return this.state.isPristine}},{key:"isRequired",value:function(){return!!this.props.required}},{key:"isValid",value:function(){return this.state.isValid}},{key:"isValidValue",value:function(e){return this.context.formsy.isValidValue.call(null,this,e)}},{key:"resetValue",value:function(){var e=this;this.setState({value:this.state.pristineValue,isPristine:!0},function(){e.context.formsy.validate(e)})}},{key:"setValidations",value:function(e,t){this.validations=v(e)||{},this.requiredValidations=!0===t?{isDefaultRequiredValue:!0}:v(t)}},{key:"setValue",value:function(e){var t=this;arguments.length>1&&void 0!==arguments[1]&&!arguments[1]?this.setState({value:e}):this.setState({value:e,isPristine:!1},function(){t.context.formsy.validate(t)})}},{key:"showError",value:function(){return!this.showRequired()&&!this.isValid()}},{key:"showRequired",value:function(){return this.state.isRequired}},{key:"render",value:function(){var t=this.props.innerRef,r=s({getErrorMessage:this.getErrorMessage,getErrorMessages:this.getErrorMessages,getValue:this.getValue,hasValue:this.hasValue,isFormDisabled:this.isFormDisabled,isValid:this.isValid,isPristine:this.isPristine,isFormSubmitted:this.isFormSubmitted,isRequired:this.isRequired,isValidValue:this.isValidValue,resetValue:this.resetValue,setValidations:this.setValidations,setValue:this.setValue,showRequired:this.showRequired,showError:this.showError},this.props);return t&&(r.ref=t),c.default.createElement(e,r)}}]),r}(c.default.Component);return t.displayName="Formsy("+function(e){return e.displayName||e.name||("string"==typeof e?e:"Component")}(e)+")",t.contextTypes={formsy:f.default.object},t.defaultProps={innerRef:function(){},required:!1,validationError:"",validationErrors:{},validations:null,value:e.defaultValue},t.propTypes=m,t}}])}); //# sourceMappingURL=formsy-react.js.map \ No newline at end of file diff --git a/release/formsy-react.js.map b/release/formsy-react.js.map index 57b13458..9ab9e239 100644 --- a/release/formsy-react.js.map +++ b/release/formsy-react.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///formsy-react.js","webpack:///webpack/bootstrap 67aa5951eee519299929","webpack:///./src/main.js","webpack:///./~/process/browser.js","webpack:///external \"react\"","webpack:///./~/fbjs/lib/invariant.js","webpack:///./src/Mixin.js","webpack:///./~/create-react-class/index.js","webpack:///./~/fbjs/lib/emptyFunction.js","webpack:///./~/fbjs/lib/warning.js","webpack:///./~/prop-types/lib/ReactPropTypesSecret.js","webpack:///./src/utils.js","webpack:///./~/prop-types/index.js","webpack:///./src/Decorator.js","webpack:///./src/HOC.js","webpack:///./src/validationRules.js","webpack:///./~/create-react-class/factory.js","webpack:///./~/fbjs/lib/emptyObject.js","webpack:///./~/form-data-to-object/index.js","webpack:///./~/object-assign/index.js","webpack:///./~/prop-types/checkPropTypes.js","webpack:///./~/prop-types/factoryWithThrowingShims.js","webpack:///./~/prop-types/factoryWithTypeCheckers.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_2__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","global","_objectWithoutProperties","obj","keys","target","i","indexOf","Object","prototype","hasOwnProperty","_extends","assign","arguments","length","source","key","_typeof","Symbol","iterator","constructor","PropTypes","React","createReactClass","Formsy","validationRules","formDataToObject","utils","Mixin","HOC","Decorator","options","emptyArray","defaults","passedOptions","addValidationRule","name","func","Form","displayName","getInitialState","isValid","isSubmitting","canChange","getDefaultProps","onSuccess","onError","onSubmit","onValidSubmit","onInvalidSubmit","onValid","onInvalid","onChange","validationErrors","preventExternalInvalidation","childContextTypes","formsy","object","getChildContext","_this","attachToForm","detachFromForm","validate","isFormDisabled","isValidValue","component","value","runValidation","componentWillMount","inputs","componentDidMount","validateForm","componentWillUpdate","prevInputNames","map","props","componentDidUpdate","setInputValidationErrors","newInputNames","arraysDiffer","reset","data","setFormPristine","resetModel","submit","event","preventDefault","model","getModel","updateInputsWithError","state","mapModel","mapping","toObj","reduce","mappedModel","keyArray","split","base","currentKey","shift","currentValues","getCurrentValues","forEach","setValue","resetValue","errors","args","_isValid","_validationError","setState","apply","isChanged","isSame","getPristineValues","_this2","index","find","Error","JSON","stringify","_externalError","disabled","_value","isPristine","_formSubmitted","_isPristine","validation","_isRequired","isRequired","error","validationError","validationResults","runRules","_validations","requiredResults","_requiredValidations","failed","success","filter","x","pos","arr","validations","results","validationMethod","push","_this3","onValidationComplete","allIsValid","every","bind","componentPos","slice","concat","render","_props","nonFormsyProps","createElement","children","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","e","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","queueIndex","drainQueue","timeout","len","run","Item","array","noop","process","nextTick","Array","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","invariant","condition","format","a","b","d","f","validateFormat","undefined","argIndex","replace","framesToPop","NODE_ENV","convertValidationsToObject","validateMethod","arg","parse","_pristineValue","contextTypes","configure","setValidations","required","context","componentWillReceiveProps","nextProps","prevProps","componentWillUnmount","isDefaultRequiredValue","getValue","hasValue","getErrorMessage","messages","getErrorMessages","showRequired","isFormSubmitted","showError","ReactNoopUpdateQueue","Component","updater","isValidElement","makeEmptyFunction","emptyFunction","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsNull","thatReturnsThis","thatReturnsArgument","warning","printWarning","_len","_key","message","console","_len2","_key2","ReactPropTypesSecret","isDifferent","item","objectsDiffer","isArray","toString","collection","fn","l","REACT_ELEMENT_TYPE","for","$$typeof","throwOnDirectAccess","mixins","getDisplayName","innerRef","propsForElement","ref","isExisty","isEmpty","values","matchRegexp","regexp","test","isUndefined","isEmptyString","isEmail","isUrl","isTrue","isFalse","isNumeric","isAlpha","isAlphanumeric","isInt","isFloat","isWords","isSpecialWords","isLength","equals","eql","equalsField","field","maxLength","minLength","identity","ReactComponent","validateTypeDef","Constructor","typeDef","location","propName","ReactPropTypeLocationNames","validateMethodOverride","isAlreadyDefined","specPolicy","ReactClassInterface","ReactClassMixin","_invariant","mixSpecIntoComponent","spec","proto","autoBindPairs","__reactAutoBindPairs","MIXINS_KEY","RESERVED_SPEC_KEYS","property","isReactClassMethod","isFunction","shouldAutoBind","autobind","createMergedResultFunction","createChainedFunction","typeofSpec","isMixinValid","mixStaticSpecIntoComponent","statics","isReserved","isInherited","mergeIntoWithNoDuplicateKeys","one","two","bindAutoBindMethod","method","boundMethod","__reactBoundContext","__reactBoundMethod","__reactBoundArguments","componentName","_bind","newThis","reboundMethod","bindAutoBindMethods","pairs","autoBindKey","createClass","refs","emptyObject","initialState","_isMockFunction","ReactClassComponent","injectedMixins","IsMountedPreMixin","IsMountedPostMixin","defaultProps","isReactClassApproved","componentShouldUpdate","componentWillRecieveProps","methodName","propTypes","shouldComponentUpdate","updateComponent","_assign","__isMounted","replaceState","newState","callback","enqueueReplaceState","isMounted","__didWarnIsMounted","prop","childContext","freeze","output","parentKey","match","paths","currentPath","pathKey","isNaN","fromObj","recur","newObj","currVal","v","toObject","val","TypeError","shouldUseNative","test1","String","getOwnPropertyNames","test2","fromCharCode","order2","n","join","test3","letter","err","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","from","symbols","to","s","checkPropTypes","typeSpecs","getStack","typeSpecName","ex","loggedTypeFailures","stack","shim","propFullName","secret","getShim","ReactPropTypes","bool","number","string","symbol","any","arrayOf","element","instanceOf","node","objectOf","oneOf","oneOfType","shape","getIteratorFn","maybeIterable","iteratorFn","ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","is","y","PropTypeError","createChainableTypeChecker","checkType","ANONYMOUS","cacheKey","manualPropTypeCallCache","manualPropTypeWarningCount","chainedCheckType","createPrimitiveTypeChecker","expectedType","propValue","propType","getPropType","preciseType","getPreciseType","createAnyTypeChecker","createArrayOfTypeChecker","typeChecker","createElementTypeChecker","createInstanceTypeChecker","expectedClass","expectedClassName","actualClassName","getClassName","createEnumTypeChecker","expectedValues","valuesString","createObjectOfTypeChecker","createUnionTypeChecker","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","createNodeChecker","isNode","createShapeTypeChecker","shapeTypes","step","entries","next","done","entry","isSymbol","RegExp","Date","type"],"mappings":"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","file":"formsy-react.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Formsy\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"Formsy\"] = factory(root[\"react\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_2__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Formsy\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"Formsy\"] = factory(root[\"react\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_2__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\t\n\tvar PropTypes = __webpack_require__(10);\n\tvar React = global.React || __webpack_require__(2);\n\tvar createReactClass = __webpack_require__(5);\n\tvar Formsy = {};\n\tvar validationRules = __webpack_require__(13);\n\tvar formDataToObject = __webpack_require__(16);\n\tvar utils = __webpack_require__(9);\n\tvar Mixin = __webpack_require__(4);\n\tvar HOC = __webpack_require__(12);\n\tvar Decorator = __webpack_require__(11);\n\tvar options = {};\n\tvar emptyArray = [];\n\t\n\tFormsy.Mixin = Mixin;\n\tFormsy.HOC = HOC;\n\tFormsy.Decorator = Decorator;\n\t\n\tFormsy.defaults = function (passedOptions) {\n\t options = passedOptions;\n\t};\n\t\n\tFormsy.addValidationRule = function (name, func) {\n\t validationRules[name] = func;\n\t};\n\t\n\tFormsy.Form = createReactClass({\n\t displayName: 'Formsy',\n\t getInitialState: function getInitialState() {\n\t return {\n\t isValid: true,\n\t isSubmitting: false,\n\t canChange: false\n\t };\n\t },\n\t getDefaultProps: function getDefaultProps() {\n\t return {\n\t onSuccess: function onSuccess() {},\n\t onError: function onError() {},\n\t onSubmit: function onSubmit() {},\n\t onValidSubmit: function onValidSubmit() {},\n\t onInvalidSubmit: function onInvalidSubmit() {},\n\t onValid: function onValid() {},\n\t onInvalid: function onInvalid() {},\n\t onChange: function onChange() {},\n\t validationErrors: null,\n\t preventExternalInvalidation: false\n\t };\n\t },\n\t\n\t childContextTypes: {\n\t formsy: PropTypes.object\n\t },\n\t getChildContext: function getChildContext() {\n\t var _this = this;\n\t\n\t return {\n\t formsy: {\n\t attachToForm: this.attachToForm,\n\t detachFromForm: this.detachFromForm,\n\t validate: this.validate,\n\t isFormDisabled: this.isFormDisabled,\n\t isValidValue: function isValidValue(component, value) {\n\t return _this.runValidation(component, value).isValid;\n\t }\n\t }\n\t };\n\t },\n\t\n\t // Add a map to store the inputs of the form, a model to store\n\t // the values of the form and register child inputs\n\t componentWillMount: function componentWillMount() {\n\t this.inputs = [];\n\t },\n\t\n\t componentDidMount: function componentDidMount() {\n\t this.validateForm();\n\t },\n\t\n\t componentWillUpdate: function componentWillUpdate() {\n\t // Keep a reference to input names before form updates,\n\t // to check if inputs has changed after render\n\t this.prevInputNames = this.inputs.map(function (component) {\n\t return component.props.name;\n\t });\n\t },\n\t\n\t componentDidUpdate: function componentDidUpdate() {\n\t\n\t if (this.props.validationErrors && _typeof(this.props.validationErrors) === 'object' && Object.keys(this.props.validationErrors).length > 0) {\n\t this.setInputValidationErrors(this.props.validationErrors);\n\t }\n\t\n\t var newInputNames = this.inputs.map(function (component) {\n\t return component.props.name;\n\t });\n\t if (utils.arraysDiffer(this.prevInputNames, newInputNames)) {\n\t this.validateForm();\n\t }\n\t },\n\t\n\t // Allow resetting to specified data\n\t reset: function reset(data) {\n\t this.setFormPristine(true);\n\t this.resetModel(data);\n\t },\n\t\n\t // Update model, submit to url prop and send the model\n\t submit: function submit(event) {\n\t\n\t event && event.preventDefault();\n\t\n\t // Trigger form as not pristine.\n\t // If any inputs have not been touched yet this will make them dirty\n\t // so validation becomes visible (if based on isPristine)\n\t this.setFormPristine(false);\n\t var model = this.getModel();\n\t this.props.onSubmit(model, this.resetModel, this.updateInputsWithError);\n\t this.state.isValid ? this.props.onValidSubmit(model, this.resetModel, this.updateInputsWithError) : this.props.onInvalidSubmit(model, this.resetModel, this.updateInputsWithError);\n\t },\n\t\n\t mapModel: function mapModel(model) {\n\t\n\t if (this.props.mapping) {\n\t return this.props.mapping(model);\n\t } else {\n\t return formDataToObject.toObj(Object.keys(model).reduce(function (mappedModel, key) {\n\t\n\t var keyArray = key.split('.');\n\t var base = mappedModel;\n\t while (keyArray.length) {\n\t var currentKey = keyArray.shift();\n\t base = base[currentKey] = keyArray.length ? base[currentKey] || {} : model[key];\n\t }\n\t\n\t return mappedModel;\n\t }, {}));\n\t }\n\t },\n\t\n\t getModel: function getModel() {\n\t var currentValues = this.getCurrentValues();\n\t return this.mapModel(currentValues);\n\t },\n\t\n\t // Reset each key in the model to the original / initial / specified value\n\t resetModel: function resetModel(data) {\n\t this.inputs.forEach(function (component) {\n\t var name = component.props.name;\n\t if (data && data.hasOwnProperty(name)) {\n\t component.setValue(data[name]);\n\t } else {\n\t component.resetValue();\n\t }\n\t });\n\t this.validateForm();\n\t },\n\t\n\t setInputValidationErrors: function setInputValidationErrors(errors) {\n\t this.inputs.forEach(function (component) {\n\t var name = component.props.name;\n\t var args = [{\n\t _isValid: !(name in errors),\n\t _validationError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n\t }];\n\t component.setState.apply(component, args);\n\t });\n\t },\n\t\n\t // Checks if the values have changed from their initial value\n\t isChanged: function isChanged() {\n\t return !utils.isSame(this.getPristineValues(), this.getCurrentValues());\n\t },\n\t\n\t getPristineValues: function getPristineValues() {\n\t return this.inputs.reduce(function (data, component) {\n\t var name = component.props.name;\n\t data[name] = component.props.value;\n\t return data;\n\t }, {});\n\t },\n\t\n\t // Go through errors from server and grab the components\n\t // stored in the inputs map. Change their state to invalid\n\t // and set the serverError message\n\t updateInputsWithError: function updateInputsWithError(errors) {\n\t var _this2 = this;\n\t\n\t Object.keys(errors).forEach(function (name, index) {\n\t var component = utils.find(_this2.inputs, function (component) {\n\t return component.props.name === name;\n\t });\n\t if (!component) {\n\t throw new Error('You are trying to update an input that does not exist. ' + 'Verify errors object with input names. ' + JSON.stringify(errors));\n\t }\n\t var args = [{\n\t _isValid: _this2.props.preventExternalInvalidation || false,\n\t _externalError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n\t }];\n\t component.setState.apply(component, args);\n\t });\n\t },\n\t\n\t isFormDisabled: function isFormDisabled() {\n\t return this.props.disabled;\n\t },\n\t\n\t getCurrentValues: function getCurrentValues() {\n\t return this.inputs.reduce(function (data, component) {\n\t var name = component.props.name;\n\t data[name] = component.state._value;\n\t return data;\n\t }, {});\n\t },\n\t\n\t setFormPristine: function setFormPristine(isPristine) {\n\t this.setState({\n\t _formSubmitted: !isPristine\n\t });\n\t\n\t // Iterate through each component and set it as pristine\n\t // or \"dirty\".\n\t this.inputs.forEach(function (component, index) {\n\t component.setState({\n\t _formSubmitted: !isPristine,\n\t _isPristine: isPristine\n\t });\n\t });\n\t },\n\t\n\t // Use the binded values and the actual input value to\n\t // validate the input and set its state. Then check the\n\t // state of the form itself\n\t validate: function validate(component) {\n\t\n\t // Trigger onChange\n\t if (this.state.canChange) {\n\t this.props.onChange(this.getCurrentValues(), this.isChanged());\n\t }\n\t\n\t var validation = this.runValidation(component);\n\t // Run through the validations, split them up and call\n\t // the validator IF there is a value or it is required\n\t component.setState({\n\t _isValid: validation.isValid,\n\t _isRequired: validation.isRequired,\n\t _validationError: validation.error,\n\t _externalError: null\n\t }, this.validateForm);\n\t },\n\t\n\t // Checks validation on current value or a passed value\n\t runValidation: function runValidation(component, value) {\n\t\n\t var currentValues = this.getCurrentValues();\n\t var validationErrors = component.props.validationErrors;\n\t var validationError = component.props.validationError;\n\t value = arguments.length === 2 ? value : component.state._value;\n\t\n\t var validationResults = this.runRules(value, currentValues, component._validations);\n\t var requiredResults = this.runRules(value, currentValues, component._requiredValidations);\n\t\n\t // the component defines an explicit validate function\n\t if (typeof component.validate === \"function\") {\n\t validationResults.failed = component.validate() ? [] : ['failed'];\n\t }\n\t\n\t var isRequired = Object.keys(component._requiredValidations).length ? !!requiredResults.success.length : false;\n\t var isValid = !validationResults.failed.length && !(this.props.validationErrors && this.props.validationErrors[component.props.name]);\n\t\n\t return {\n\t isRequired: isRequired,\n\t isValid: isRequired ? false : isValid,\n\t error: function () {\n\t\n\t if (isValid && !isRequired) {\n\t return emptyArray;\n\t }\n\t\n\t if (validationResults.errors.length) {\n\t return validationResults.errors;\n\t }\n\t\n\t if (this.props.validationErrors && this.props.validationErrors[component.props.name]) {\n\t return typeof this.props.validationErrors[component.props.name] === 'string' ? [this.props.validationErrors[component.props.name]] : this.props.validationErrors[component.props.name];\n\t }\n\t\n\t if (isRequired) {\n\t var error = validationErrors[requiredResults.success[0]];\n\t return error ? [error] : null;\n\t }\n\t\n\t if (validationResults.failed.length) {\n\t return validationResults.failed.map(function (failed) {\n\t return validationErrors[failed] ? validationErrors[failed] : validationError;\n\t }).filter(function (x, pos, arr) {\n\t // Remove duplicates\n\t return arr.indexOf(x) === pos;\n\t });\n\t }\n\t }.call(this)\n\t };\n\t },\n\t\n\t runRules: function runRules(value, currentValues, validations) {\n\t\n\t var results = {\n\t errors: [],\n\t failed: [],\n\t success: []\n\t };\n\t if (Object.keys(validations).length) {\n\t Object.keys(validations).forEach(function (validationMethod) {\n\t\n\t if (validationRules[validationMethod] && typeof validations[validationMethod] === 'function') {\n\t throw new Error('Formsy does not allow you to override default validations: ' + validationMethod);\n\t }\n\t\n\t if (!validationRules[validationMethod] && typeof validations[validationMethod] !== 'function') {\n\t throw new Error('Formsy does not have the validation rule: ' + validationMethod);\n\t }\n\t\n\t if (typeof validations[validationMethod] === 'function') {\n\t var validation = validations[validationMethod](currentValues, value);\n\t if (typeof validation === 'string') {\n\t results.errors.push(validation);\n\t results.failed.push(validationMethod);\n\t } else if (!validation) {\n\t results.failed.push(validationMethod);\n\t }\n\t return;\n\t } else if (typeof validations[validationMethod] !== 'function') {\n\t var validation = validationRules[validationMethod](currentValues, value, validations[validationMethod]);\n\t if (typeof validation === 'string') {\n\t results.errors.push(validation);\n\t results.failed.push(validationMethod);\n\t } else if (!validation) {\n\t results.failed.push(validationMethod);\n\t } else {\n\t results.success.push(validationMethod);\n\t }\n\t return;\n\t }\n\t\n\t return results.success.push(validationMethod);\n\t });\n\t }\n\t\n\t return results;\n\t },\n\t\n\t // Validate the form by going through all child input components\n\t // and check their state\n\t validateForm: function validateForm() {\n\t var _this3 = this;\n\t\n\t // We need a callback as we are validating all inputs again. This will\n\t // run when the last component has set its state\n\t var onValidationComplete = function () {\n\t var allIsValid = this.inputs.every(function (component) {\n\t return component.state._isValid;\n\t });\n\t\n\t this.setState({\n\t isValid: allIsValid\n\t });\n\t\n\t if (allIsValid) {\n\t this.props.onValid();\n\t } else {\n\t this.props.onInvalid();\n\t }\n\t\n\t // Tell the form that it can start to trigger change events\n\t this.setState({\n\t canChange: true\n\t });\n\t }.bind(this);\n\t\n\t // Run validation again in case affected by other inputs. The\n\t // last component validated will run the onValidationComplete callback\n\t this.inputs.forEach(function (component, index) {\n\t var validation = _this3.runValidation(component);\n\t if (validation.isValid && component.state._externalError) {\n\t validation.isValid = false;\n\t }\n\t component.setState({\n\t _isValid: validation.isValid,\n\t _isRequired: validation.isRequired,\n\t _validationError: validation.error,\n\t _externalError: !validation.isValid && component.state._externalError ? component.state._externalError : null\n\t }, index === _this3.inputs.length - 1 ? onValidationComplete : null);\n\t });\n\t\n\t // If there are no inputs, set state where form is ready to trigger\n\t // change event. New inputs might be added later\n\t if (!this.inputs.length) {\n\t this.setState({\n\t canChange: true\n\t });\n\t }\n\t },\n\t\n\t // Method put on each input component to register\n\t // itself to the form\n\t attachToForm: function attachToForm(component) {\n\t\n\t if (this.inputs.indexOf(component) === -1) {\n\t this.inputs.push(component);\n\t }\n\t\n\t this.validate(component);\n\t },\n\t\n\t // Method put on each input component to unregister\n\t // itself from the form\n\t detachFromForm: function detachFromForm(component) {\n\t var componentPos = this.inputs.indexOf(component);\n\t\n\t if (componentPos !== -1) {\n\t this.inputs = this.inputs.slice(0, componentPos).concat(this.inputs.slice(componentPos + 1));\n\t }\n\t\n\t this.validateForm();\n\t },\n\t render: function render() {\n\t var _props = this.props,\n\t mapping = _props.mapping,\n\t validationErrors = _props.validationErrors,\n\t onSubmit = _props.onSubmit,\n\t onValid = _props.onValid,\n\t onValidSubmit = _props.onValidSubmit,\n\t onInvalid = _props.onInvalid,\n\t onInvalidSubmit = _props.onInvalidSubmit,\n\t onChange = _props.onChange,\n\t reset = _props.reset,\n\t preventExternalInvalidation = _props.preventExternalInvalidation,\n\t onSuccess = _props.onSuccess,\n\t onError = _props.onError,\n\t nonFormsyProps = _objectWithoutProperties(_props, ['mapping', 'validationErrors', 'onSubmit', 'onValid', 'onValidSubmit', 'onInvalid', 'onInvalidSubmit', 'onChange', 'reset', 'preventExternalInvalidation', 'onSuccess', 'onError']);\n\t\n\t return React.createElement(\n\t 'form',\n\t _extends({}, nonFormsyProps, { onSubmit: this.submit }),\n\t this.props.children\n\t );\n\t }\n\t});\n\t\n\tif (!global.exports && !global.module && (!global.define || !global.define.amd)) {\n\t global.Formsy = Formsy;\n\t}\n\t\n\tmodule.exports = Formsy;\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things. But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals. It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t try {\n\t if (typeof setTimeout === 'function') {\n\t cachedSetTimeout = setTimeout;\n\t } else {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t } catch (e) {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t try {\n\t if (typeof clearTimeout === 'function') {\n\t cachedClearTimeout = clearTimeout;\n\t } else {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t } catch (e) {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t} ())\n\tfunction runTimeout(fun) {\n\t if (cachedSetTimeout === setTimeout) {\n\t //normal enviroments in sane situations\n\t return setTimeout(fun, 0);\n\t }\n\t // if setTimeout wasn't available but was latter defined\n\t if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t cachedSetTimeout = setTimeout;\n\t return setTimeout(fun, 0);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedSetTimeout(fun, 0);\n\t } catch(e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedSetTimeout.call(null, fun, 0);\n\t } catch(e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n\t return cachedSetTimeout.call(this, fun, 0);\n\t }\n\t }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t if (cachedClearTimeout === clearTimeout) {\n\t //normal enviroments in sane situations\n\t return clearTimeout(marker);\n\t }\n\t // if clearTimeout wasn't available but was latter defined\n\t if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t cachedClearTimeout = clearTimeout;\n\t return clearTimeout(marker);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedClearTimeout(marker);\n\t } catch (e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedClearTimeout.call(null, marker);\n\t } catch (e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n\t // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t return cachedClearTimeout.call(this, marker);\n\t }\n\t }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t if (!draining || !currentQueue) {\n\t return;\n\t }\n\t draining = false;\n\t if (currentQueue.length) {\n\t queue = currentQueue.concat(queue);\n\t } else {\n\t queueIndex = -1;\n\t }\n\t if (queue.length) {\n\t drainQueue();\n\t }\n\t}\n\t\n\tfunction drainQueue() {\n\t if (draining) {\n\t return;\n\t }\n\t var timeout = runTimeout(cleanUpNextTick);\n\t draining = true;\n\t\n\t var len = queue.length;\n\t while(len) {\n\t currentQueue = queue;\n\t queue = [];\n\t while (++queueIndex < len) {\n\t if (currentQueue) {\n\t currentQueue[queueIndex].run();\n\t }\n\t }\n\t queueIndex = -1;\n\t len = queue.length;\n\t }\n\t currentQueue = null;\n\t draining = false;\n\t runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t var args = new Array(arguments.length - 1);\n\t if (arguments.length > 1) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t args[i - 1] = arguments[i];\n\t }\n\t }\n\t queue.push(new Item(fun, args));\n\t if (queue.length === 1 && !draining) {\n\t runTimeout(drainQueue);\n\t }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t this.fun = fun;\n\t this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\tprocess.prependListener = noop;\n\tprocess.prependOnceListener = noop;\n\t\n\tprocess.listeners = function (name) { return [] }\n\t\n\tprocess.binding = function (name) {\n\t throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\t/**\n\t * Use invariant() to assert state which your program assumes to be true.\n\t *\n\t * Provide sprintf-style format (only %s is supported) and arguments\n\t * to provide information about what broke and what you were\n\t * expecting.\n\t *\n\t * The invariant message will be stripped in production, but the invariant\n\t * will remain to ensure logic does not differ in production.\n\t */\n\t\n\tvar validateFormat = function validateFormat(format) {};\n\t\n\tif (process.env.NODE_ENV !== 'production') {\n\t validateFormat = function validateFormat(format) {\n\t if (format === undefined) {\n\t throw new Error('invariant requires an error message argument');\n\t }\n\t };\n\t}\n\t\n\tfunction invariant(condition, format, a, b, c, d, e, f) {\n\t validateFormat(format);\n\t\n\t if (!condition) {\n\t var error;\n\t if (format === undefined) {\n\t error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n\t } else {\n\t var args = [a, b, c, d, e, f];\n\t var argIndex = 0;\n\t error = new Error(format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t }));\n\t error.name = 'Invariant Violation';\n\t }\n\t\n\t error.framesToPop = 1; // we don't care about invariant's own frame\n\t throw error;\n\t }\n\t}\n\t\n\tmodule.exports = invariant;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar PropTypes = __webpack_require__(10);\n\tvar utils = __webpack_require__(9);\n\tvar React = global.React || __webpack_require__(2);\n\t\n\tvar convertValidationsToObject = function convertValidationsToObject(validations) {\n\t\n\t if (typeof validations === 'string') {\n\t\n\t return validations.split(/\\,(?![^{\\[]*[}\\]])/g).reduce(function (validations, validation) {\n\t var args = validation.split(':');\n\t var validateMethod = args.shift();\n\t\n\t args = args.map(function (arg) {\n\t try {\n\t return JSON.parse(arg);\n\t } catch (e) {\n\t return arg; // It is a string if it can not parse it\n\t }\n\t });\n\t\n\t if (args.length > 1) {\n\t throw new Error('Formsy does not support multiple args on string validations. Use object format of validations instead.');\n\t }\n\t\n\t validations[validateMethod] = args.length ? args[0] : true;\n\t return validations;\n\t }, {});\n\t }\n\t\n\t return validations || {};\n\t};\n\t\n\tmodule.exports = {\n\t getInitialState: function getInitialState() {\n\t return {\n\t _value: this.props.value,\n\t _isRequired: false,\n\t _isValid: true,\n\t _isPristine: true,\n\t _pristineValue: this.props.value,\n\t _validationError: [],\n\t _externalError: null,\n\t _formSubmitted: false\n\t };\n\t },\n\t contextTypes: {\n\t formsy: PropTypes.object // What about required?\n\t },\n\t getDefaultProps: function getDefaultProps() {\n\t return {\n\t validationError: '',\n\t validationErrors: {}\n\t };\n\t },\n\t\n\t componentWillMount: function componentWillMount() {\n\t var configure = function () {\n\t this.setValidations(this.props.validations, this.props.required);\n\t\n\t // Pass a function instead?\n\t this.context.formsy.attachToForm(this);\n\t //this.props._attachToForm(this);\n\t }.bind(this);\n\t\n\t if (!this.props.name) {\n\t throw new Error('Form Input requires a name property when used');\n\t }\n\t\n\t /*\n\t if (!this.props._attachToForm) {\n\t return setTimeout(function () {\n\t if (!this.isMounted()) return;\n\t if (!this.props._attachToForm) {\n\t throw new Error('Form Mixin requires component to be nested in a Form');\n\t }\n\t configure();\n\t }.bind(this), 0);\n\t }\n\t */\n\t configure();\n\t },\n\t\n\t // We have to make the validate method is kept when new props are added\n\t componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n\t this.setValidations(nextProps.validations, nextProps.required);\n\t },\n\t\n\t componentDidUpdate: function componentDidUpdate(prevProps) {\n\t\n\t // If the value passed has changed, set it. If value is not passed it will\n\t // internally update, and this will never run\n\t if (!utils.isSame(this.props.value, prevProps.value)) {\n\t this.setValue(this.props.value);\n\t }\n\t\n\t // If validations or required is changed, run a new validation\n\t if (!utils.isSame(this.props.validations, prevProps.validations) || !utils.isSame(this.props.required, prevProps.required)) {\n\t this.context.formsy.validate(this);\n\t }\n\t },\n\t\n\t // Detach it when component unmounts\n\t componentWillUnmount: function componentWillUnmount() {\n\t this.context.formsy.detachFromForm(this);\n\t //this.props._detachFromForm(this);\n\t },\n\t\n\t setValidations: function setValidations(validations, required) {\n\t\n\t // Add validations to the store itself as the props object can not be modified\n\t this._validations = convertValidationsToObject(validations) || {};\n\t this._requiredValidations = required === true ? { isDefaultRequiredValue: true } : convertValidationsToObject(required);\n\t },\n\t\n\t // We validate after the value has been set\n\t setValue: function setValue(value) {\n\t this.setState({\n\t _value: value,\n\t _isPristine: false\n\t }, function () {\n\t this.context.formsy.validate(this);\n\t //this.props._validate(this);\n\t }.bind(this));\n\t },\n\t resetValue: function resetValue() {\n\t this.setState({\n\t _value: this.state._pristineValue,\n\t _isPristine: true\n\t }, function () {\n\t this.context.formsy.validate(this);\n\t //this.props._validate(this);\n\t });\n\t },\n\t getValue: function getValue() {\n\t return this.state._value;\n\t },\n\t hasValue: function hasValue() {\n\t return this.state._value !== '';\n\t },\n\t getErrorMessage: function getErrorMessage() {\n\t var messages = this.getErrorMessages();\n\t return messages.length ? messages[0] : null;\n\t },\n\t getErrorMessages: function getErrorMessages() {\n\t return !this.isValid() || this.showRequired() ? this.state._externalError || this.state._validationError || [] : [];\n\t },\n\t isFormDisabled: function isFormDisabled() {\n\t return this.context.formsy.isFormDisabled();\n\t //return this.props._isFormDisabled();\n\t },\n\t isValid: function isValid() {\n\t return this.state._isValid;\n\t },\n\t isPristine: function isPristine() {\n\t return this.state._isPristine;\n\t },\n\t isFormSubmitted: function isFormSubmitted() {\n\t return this.state._formSubmitted;\n\t },\n\t isRequired: function isRequired() {\n\t return !!this.props.required;\n\t },\n\t showRequired: function showRequired() {\n\t return this.state._isRequired;\n\t },\n\t showError: function showError() {\n\t return !this.showRequired() && !this.isValid();\n\t },\n\t isValidValue: function isValidValue(value) {\n\t return this.context.formsy.isValidValue.call(null, this, value);\n\t //return this.props._isValidValue.call(null, this, value);\n\t }\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar React = __webpack_require__(2);\n\tvar factory = __webpack_require__(14);\n\t\n\tif (typeof React === 'undefined') {\n\t throw Error(\n\t 'create-react-class could not find the React object. If you are using script tags, ' +\n\t 'make sure that React is being loaded before create-react-class.'\n\t );\n\t}\n\t\n\t// Hack to grab NoopUpdateQueue from isomorphic React\n\tvar ReactNoopUpdateQueue = new React.Component().updater;\n\t\n\tmodule.exports = factory(\n\t React.Component,\n\t React.isValidElement,\n\t ReactNoopUpdateQueue\n\t);\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * \n\t */\n\t\n\tfunction makeEmptyFunction(arg) {\n\t return function () {\n\t return arg;\n\t };\n\t}\n\t\n\t/**\n\t * This function accepts and discards inputs; it has no side effects. This is\n\t * primarily useful idiomatically for overridable function endpoints which\n\t * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n\t */\n\tvar emptyFunction = function emptyFunction() {};\n\t\n\temptyFunction.thatReturns = makeEmptyFunction;\n\temptyFunction.thatReturnsFalse = makeEmptyFunction(false);\n\temptyFunction.thatReturnsTrue = makeEmptyFunction(true);\n\temptyFunction.thatReturnsNull = makeEmptyFunction(null);\n\temptyFunction.thatReturnsThis = function () {\n\t return this;\n\t};\n\temptyFunction.thatReturnsArgument = function (arg) {\n\t return arg;\n\t};\n\t\n\tmodule.exports = emptyFunction;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {/**\n\t * Copyright 2014-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar emptyFunction = __webpack_require__(6);\n\t\n\t/**\n\t * Similar to invariant but only logs a warning if the condition is not met.\n\t * This can be used to log issues in development environments in critical\n\t * paths. Removing the logging code for production environments will keep the\n\t * same logic and follow the same code paths.\n\t */\n\t\n\tvar warning = emptyFunction;\n\t\n\tif (process.env.NODE_ENV !== 'production') {\n\t (function () {\n\t var printWarning = function printWarning(format) {\n\t for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t args[_key - 1] = arguments[_key];\n\t }\n\t\n\t var argIndex = 0;\n\t var message = 'Warning: ' + format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t });\n\t if (typeof console !== 'undefined') {\n\t console.error(message);\n\t }\n\t try {\n\t // --- Welcome to debugging React ---\n\t // This error was thrown as a convenience so that you can use this stack\n\t // to find the callsite that caused this warning to fire.\n\t throw new Error(message);\n\t } catch (x) {}\n\t };\n\t\n\t warning = function warning(condition, format) {\n\t if (format === undefined) {\n\t throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n\t }\n\t\n\t if (format.indexOf('Failed Composite propType: ') === 0) {\n\t return; // Ignore CompositeComponent proptype check.\n\t }\n\t\n\t if (!condition) {\n\t for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n\t args[_key2 - 2] = arguments[_key2];\n\t }\n\t\n\t printWarning.apply(undefined, [format].concat(args));\n\t }\n\t };\n\t })();\n\t}\n\t\n\tmodule.exports = warning;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Copyright 2013-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t */\n\t\n\t'use strict';\n\t\n\tvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\t\n\tmodule.exports = ReactPropTypesSecret;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tmodule.exports = {\n\t arraysDiffer: function arraysDiffer(a, b) {\n\t var isDifferent = false;\n\t if (a.length !== b.length) {\n\t isDifferent = true;\n\t } else {\n\t a.forEach(function (item, index) {\n\t if (!this.isSame(item, b[index])) {\n\t isDifferent = true;\n\t }\n\t }, this);\n\t }\n\t return isDifferent;\n\t },\n\t\n\t objectsDiffer: function objectsDiffer(a, b) {\n\t var isDifferent = false;\n\t if (Object.keys(a).length !== Object.keys(b).length) {\n\t isDifferent = true;\n\t } else {\n\t Object.keys(a).forEach(function (key) {\n\t if (!this.isSame(a[key], b[key])) {\n\t isDifferent = true;\n\t }\n\t }, this);\n\t }\n\t return isDifferent;\n\t },\n\t\n\t isSame: function isSame(a, b) {\n\t if ((typeof a === 'undefined' ? 'undefined' : _typeof(a)) !== (typeof b === 'undefined' ? 'undefined' : _typeof(b))) {\n\t return false;\n\t } else if (Array.isArray(a) && Array.isArray(b)) {\n\t return !this.arraysDiffer(a, b);\n\t } else if (typeof a === 'function') {\n\t return a.toString() === b.toString();\n\t } else if ((typeof a === 'undefined' ? 'undefined' : _typeof(a)) === 'object' && a !== null && b !== null) {\n\t return !this.objectsDiffer(a, b);\n\t }\n\t\n\t return a === b;\n\t },\n\t\n\t find: function find(collection, fn) {\n\t for (var i = 0, l = collection.length; i < l; i++) {\n\t var item = collection[i];\n\t if (fn(item)) {\n\t return item;\n\t }\n\t }\n\t return null;\n\t }\n\t};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {/**\n\t * Copyright 2013-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t */\n\t\n\tif (process.env.NODE_ENV !== 'production') {\n\t var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n\t Symbol.for &&\n\t Symbol.for('react.element')) ||\n\t 0xeac7;\n\t\n\t var isValidElement = function(object) {\n\t return typeof object === 'object' &&\n\t object !== null &&\n\t object.$$typeof === REACT_ELEMENT_TYPE;\n\t };\n\t\n\t // By explicitly using `prop-types` you are opting into new development behavior.\n\t // http://fb.me/prop-types-in-prod\n\t var throwOnDirectAccess = true;\n\t module.exports = __webpack_require__(20)(isValidElement, throwOnDirectAccess);\n\t} else {\n\t // By explicitly using `prop-types` you are opting into new production behavior.\n\t // http://fb.me/prop-types-in-prod\n\t module.exports = __webpack_require__(19)();\n\t}\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar React = global.React || __webpack_require__(2);\n\tvar createReactClass = __webpack_require__(5);\n\tvar Mixin = __webpack_require__(4);\n\tmodule.exports = function () {\n\t return function (Component) {\n\t return createReactClass({\n\t mixins: [Mixin],\n\t render: function render() {\n\t return React.createElement(Component, _extends({\n\t setValidations: this.setValidations,\n\t setValue: this.setValue,\n\t resetValue: this.resetValue,\n\t getValue: this.getValue,\n\t hasValue: this.hasValue,\n\t getErrorMessage: this.getErrorMessage,\n\t getErrorMessages: this.getErrorMessages,\n\t isFormDisabled: this.isFormDisabled,\n\t isValid: this.isValid,\n\t isPristine: this.isPristine,\n\t isFormSubmitted: this.isFormSubmitted,\n\t isRequired: this.isRequired,\n\t showRequired: this.showRequired,\n\t showError: this.showError,\n\t isValidValue: this.isValidValue\n\t }, this.props));\n\t }\n\t });\n\t };\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar React = global.React || __webpack_require__(2);\n\tvar createReactClass = __webpack_require__(5);\n\tvar Mixin = __webpack_require__(4);\n\tmodule.exports = function (Component) {\n\t return createReactClass({\n\t displayName: 'Formsy(' + getDisplayName(Component) + ')',\n\t mixins: [Mixin],\n\t\n\t render: function render() {\n\t var innerRef = this.props.innerRef;\n\t\n\t var propsForElement = _extends({\n\t setValidations: this.setValidations,\n\t setValue: this.setValue,\n\t resetValue: this.resetValue,\n\t getValue: this.getValue,\n\t hasValue: this.hasValue,\n\t getErrorMessage: this.getErrorMessage,\n\t getErrorMessages: this.getErrorMessages,\n\t isFormDisabled: this.isFormDisabled,\n\t isValid: this.isValid,\n\t isPristine: this.isPristine,\n\t isFormSubmitted: this.isFormSubmitted,\n\t isRequired: this.isRequired,\n\t showRequired: this.showRequired,\n\t showError: this.showError,\n\t isValidValue: this.isValidValue\n\t }, this.props);\n\t\n\t if (innerRef) {\n\t propsForElement.ref = innerRef;\n\t }\n\t return React.createElement(Component, propsForElement);\n\t }\n\t });\n\t};\n\t\n\tfunction getDisplayName(Component) {\n\t return Component.displayName || Component.name || (typeof Component === 'string' ? Component : 'Component');\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar _isExisty = function _isExisty(value) {\n\t return value !== null && value !== undefined;\n\t};\n\t\n\tvar isEmpty = function isEmpty(value) {\n\t return value === '';\n\t};\n\t\n\tvar validations = {\n\t isDefaultRequiredValue: function isDefaultRequiredValue(values, value) {\n\t return value === undefined || value === '';\n\t },\n\t isExisty: function isExisty(values, value) {\n\t return _isExisty(value);\n\t },\n\t matchRegexp: function matchRegexp(values, value, regexp) {\n\t return !_isExisty(value) || isEmpty(value) || regexp.test(value);\n\t },\n\t isUndefined: function isUndefined(values, value) {\n\t return value === undefined;\n\t },\n\t isEmptyString: function isEmptyString(values, value) {\n\t return isEmpty(value);\n\t },\n\t isEmail: function isEmail(values, value) {\n\t return validations.matchRegexp(values, value, /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i);\n\t },\n\t isUrl: function isUrl(values, value) {\n\t return validations.matchRegexp(values, value, /^(https?|s?ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i);\n\t },\n\t isTrue: function isTrue(values, value) {\n\t return value === true;\n\t },\n\t isFalse: function isFalse(values, value) {\n\t return value === false;\n\t },\n\t isNumeric: function isNumeric(values, value) {\n\t if (typeof value === 'number') {\n\t return true;\n\t }\n\t return validations.matchRegexp(values, value, /^[-+]?(?:\\d*[.])?\\d+$/);\n\t },\n\t isAlpha: function isAlpha(values, value) {\n\t return validations.matchRegexp(values, value, /^[A-Z]+$/i);\n\t },\n\t isAlphanumeric: function isAlphanumeric(values, value) {\n\t return validations.matchRegexp(values, value, /^[0-9A-Z]+$/i);\n\t },\n\t isInt: function isInt(values, value) {\n\t return validations.matchRegexp(values, value, /^(?:[-+]?(?:0|[1-9]\\d*))$/);\n\t },\n\t isFloat: function isFloat(values, value) {\n\t return validations.matchRegexp(values, value, /^(?:[-+]?(?:\\d+))?(?:\\.\\d*)?(?:[eE][\\+\\-]?(?:\\d+))?$/);\n\t },\n\t isWords: function isWords(values, value) {\n\t return validations.matchRegexp(values, value, /^[A-Z\\s]+$/i);\n\t },\n\t isSpecialWords: function isSpecialWords(values, value) {\n\t return validations.matchRegexp(values, value, /^[A-Z\\s\\u00C0-\\u017F]+$/i);\n\t },\n\t isLength: function isLength(values, value, length) {\n\t return !_isExisty(value) || isEmpty(value) || value.length === length;\n\t },\n\t equals: function equals(values, value, eql) {\n\t return !_isExisty(value) || isEmpty(value) || value == eql;\n\t },\n\t equalsField: function equalsField(values, value, field) {\n\t return value == values[field];\n\t },\n\t maxLength: function maxLength(values, value, length) {\n\t return !_isExisty(value) || value.length <= length;\n\t },\n\t minLength: function minLength(values, value, length) {\n\t return !_isExisty(value) || isEmpty(value) || value.length >= length;\n\t }\n\t};\n\t\n\tmodule.exports = validations;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {/**\n\t * Copyright 2013-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar _assign = __webpack_require__(17);\n\t\n\tvar emptyObject = __webpack_require__(15);\n\tvar _invariant = __webpack_require__(3);\n\t\n\tif (process.env.NODE_ENV !== 'production') {\n\t var warning = __webpack_require__(7);\n\t}\n\t\n\tvar MIXINS_KEY = 'mixins';\n\t\n\t// Helper function to allow the creation of anonymous functions which do not\n\t// have .name set to the name of the variable being assigned to.\n\tfunction identity(fn) {\n\t return fn;\n\t}\n\t\n\tvar ReactPropTypeLocationNames;\n\tif (process.env.NODE_ENV !== 'production') {\n\t ReactPropTypeLocationNames = {\n\t prop: 'prop',\n\t context: 'context',\n\t childContext: 'child context'\n\t };\n\t} else {\n\t ReactPropTypeLocationNames = {};\n\t}\n\t\n\tfunction factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) {\n\t /**\n\t * Policies that describe methods in `ReactClassInterface`.\n\t */\n\t\n\t var injectedMixins = [];\n\t\n\t /**\n\t * Composite components are higher-level components that compose other composite\n\t * or host components.\n\t *\n\t * To create a new type of `ReactClass`, pass a specification of\n\t * your new class to `React.createClass`. The only requirement of your class\n\t * specification is that you implement a `render` method.\n\t *\n\t * var MyComponent = React.createClass({\n\t * render: function() {\n\t * return
Hello World
;\n\t * }\n\t * });\n\t *\n\t * The class specification supports a specific protocol of methods that have\n\t * special meaning (e.g. `render`). See `ReactClassInterface` for\n\t * more the comprehensive protocol. Any other properties and methods in the\n\t * class specification will be available on the prototype.\n\t *\n\t * @interface ReactClassInterface\n\t * @internal\n\t */\n\t var ReactClassInterface = {\n\t /**\n\t * An array of Mixin objects to include when defining your component.\n\t *\n\t * @type {array}\n\t * @optional\n\t */\n\t mixins: 'DEFINE_MANY',\n\t\n\t /**\n\t * An object containing properties and methods that should be defined on\n\t * the component's constructor instead of its prototype (static methods).\n\t *\n\t * @type {object}\n\t * @optional\n\t */\n\t statics: 'DEFINE_MANY',\n\t\n\t /**\n\t * Definition of prop types for this component.\n\t *\n\t * @type {object}\n\t * @optional\n\t */\n\t propTypes: 'DEFINE_MANY',\n\t\n\t /**\n\t * Definition of context types for this component.\n\t *\n\t * @type {object}\n\t * @optional\n\t */\n\t contextTypes: 'DEFINE_MANY',\n\t\n\t /**\n\t * Definition of context types this component sets for its children.\n\t *\n\t * @type {object}\n\t * @optional\n\t */\n\t childContextTypes: 'DEFINE_MANY',\n\t\n\t // ==== Definition methods ====\n\t\n\t /**\n\t * Invoked when the component is mounted. Values in the mapping will be set on\n\t * `this.props` if that prop is not specified (i.e. using an `in` check).\n\t *\n\t * This method is invoked before `getInitialState` and therefore cannot rely\n\t * on `this.state` or use `this.setState`.\n\t *\n\t * @return {object}\n\t * @optional\n\t */\n\t getDefaultProps: 'DEFINE_MANY_MERGED',\n\t\n\t /**\n\t * Invoked once before the component is mounted. The return value will be used\n\t * as the initial value of `this.state`.\n\t *\n\t * getInitialState: function() {\n\t * return {\n\t * isOn: false,\n\t * fooBaz: new BazFoo()\n\t * }\n\t * }\n\t *\n\t * @return {object}\n\t * @optional\n\t */\n\t getInitialState: 'DEFINE_MANY_MERGED',\n\t\n\t /**\n\t * @return {object}\n\t * @optional\n\t */\n\t getChildContext: 'DEFINE_MANY_MERGED',\n\t\n\t /**\n\t * Uses props from `this.props` and state from `this.state` to render the\n\t * structure of the component.\n\t *\n\t * No guarantees are made about when or how often this method is invoked, so\n\t * it must not have side effects.\n\t *\n\t * render: function() {\n\t * var name = this.props.name;\n\t * return
Hello, {name}!
;\n\t * }\n\t *\n\t * @return {ReactComponent}\n\t * @required\n\t */\n\t render: 'DEFINE_ONCE',\n\t\n\t // ==== Delegate methods ====\n\t\n\t /**\n\t * Invoked when the component is initially created and about to be mounted.\n\t * This may have side effects, but any external subscriptions or data created\n\t * by this method must be cleaned up in `componentWillUnmount`.\n\t *\n\t * @optional\n\t */\n\t componentWillMount: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked when the component has been mounted and has a DOM representation.\n\t * However, there is no guarantee that the DOM node is in the document.\n\t *\n\t * Use this as an opportunity to operate on the DOM when the component has\n\t * been mounted (initialized and rendered) for the first time.\n\t *\n\t * @param {DOMElement} rootNode DOM element representing the component.\n\t * @optional\n\t */\n\t componentDidMount: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked before the component receives new props.\n\t *\n\t * Use this as an opportunity to react to a prop transition by updating the\n\t * state using `this.setState`. Current props are accessed via `this.props`.\n\t *\n\t * componentWillReceiveProps: function(nextProps, nextContext) {\n\t * this.setState({\n\t * likesIncreasing: nextProps.likeCount > this.props.likeCount\n\t * });\n\t * }\n\t *\n\t * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n\t * transition may cause a state change, but the opposite is not true. If you\n\t * need it, you are probably looking for `componentWillUpdate`.\n\t *\n\t * @param {object} nextProps\n\t * @optional\n\t */\n\t componentWillReceiveProps: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked while deciding if the component should be updated as a result of\n\t * receiving new props, state and/or context.\n\t *\n\t * Use this as an opportunity to `return false` when you're certain that the\n\t * transition to the new props/state/context will not require a component\n\t * update.\n\t *\n\t * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n\t * return !equal(nextProps, this.props) ||\n\t * !equal(nextState, this.state) ||\n\t * !equal(nextContext, this.context);\n\t * }\n\t *\n\t * @param {object} nextProps\n\t * @param {?object} nextState\n\t * @param {?object} nextContext\n\t * @return {boolean} True if the component should update.\n\t * @optional\n\t */\n\t shouldComponentUpdate: 'DEFINE_ONCE',\n\t\n\t /**\n\t * Invoked when the component is about to update due to a transition from\n\t * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n\t * and `nextContext`.\n\t *\n\t * Use this as an opportunity to perform preparation before an update occurs.\n\t *\n\t * NOTE: You **cannot** use `this.setState()` in this method.\n\t *\n\t * @param {object} nextProps\n\t * @param {?object} nextState\n\t * @param {?object} nextContext\n\t * @param {ReactReconcileTransaction} transaction\n\t * @optional\n\t */\n\t componentWillUpdate: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked when the component's DOM representation has been updated.\n\t *\n\t * Use this as an opportunity to operate on the DOM when the component has\n\t * been updated.\n\t *\n\t * @param {object} prevProps\n\t * @param {?object} prevState\n\t * @param {?object} prevContext\n\t * @param {DOMElement} rootNode DOM element representing the component.\n\t * @optional\n\t */\n\t componentDidUpdate: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked when the component is about to be removed from its parent and have\n\t * its DOM representation destroyed.\n\t *\n\t * Use this as an opportunity to deallocate any external resources.\n\t *\n\t * NOTE: There is no `componentDidUnmount` since your component will have been\n\t * destroyed by that point.\n\t *\n\t * @optional\n\t */\n\t componentWillUnmount: 'DEFINE_MANY',\n\t\n\t // ==== Advanced methods ====\n\t\n\t /**\n\t * Updates the component's currently mounted DOM representation.\n\t *\n\t * By default, this implements React's rendering and reconciliation algorithm.\n\t * Sophisticated clients may wish to override this.\n\t *\n\t * @param {ReactReconcileTransaction} transaction\n\t * @internal\n\t * @overridable\n\t */\n\t updateComponent: 'OVERRIDE_BASE'\n\t };\n\t\n\t /**\n\t * Mapping from class specification keys to special processing functions.\n\t *\n\t * Although these are declared like instance properties in the specification\n\t * when defining classes using `React.createClass`, they are actually static\n\t * and are accessible on the constructor instead of the prototype. Despite\n\t * being static, they must be defined outside of the \"statics\" key under\n\t * which all other static methods are defined.\n\t */\n\t var RESERVED_SPEC_KEYS = {\n\t displayName: function(Constructor, displayName) {\n\t Constructor.displayName = displayName;\n\t },\n\t mixins: function(Constructor, mixins) {\n\t if (mixins) {\n\t for (var i = 0; i < mixins.length; i++) {\n\t mixSpecIntoComponent(Constructor, mixins[i]);\n\t }\n\t }\n\t },\n\t childContextTypes: function(Constructor, childContextTypes) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t validateTypeDef(Constructor, childContextTypes, 'childContext');\n\t }\n\t Constructor.childContextTypes = _assign(\n\t {},\n\t Constructor.childContextTypes,\n\t childContextTypes\n\t );\n\t },\n\t contextTypes: function(Constructor, contextTypes) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t validateTypeDef(Constructor, contextTypes, 'context');\n\t }\n\t Constructor.contextTypes = _assign(\n\t {},\n\t Constructor.contextTypes,\n\t contextTypes\n\t );\n\t },\n\t /**\n\t * Special case getDefaultProps which should move into statics but requires\n\t * automatic merging.\n\t */\n\t getDefaultProps: function(Constructor, getDefaultProps) {\n\t if (Constructor.getDefaultProps) {\n\t Constructor.getDefaultProps = createMergedResultFunction(\n\t Constructor.getDefaultProps,\n\t getDefaultProps\n\t );\n\t } else {\n\t Constructor.getDefaultProps = getDefaultProps;\n\t }\n\t },\n\t propTypes: function(Constructor, propTypes) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t validateTypeDef(Constructor, propTypes, 'prop');\n\t }\n\t Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n\t },\n\t statics: function(Constructor, statics) {\n\t mixStaticSpecIntoComponent(Constructor, statics);\n\t },\n\t autobind: function() {}\n\t };\n\t\n\t function validateTypeDef(Constructor, typeDef, location) {\n\t for (var propName in typeDef) {\n\t if (typeDef.hasOwnProperty(propName)) {\n\t // use a warning instead of an _invariant so components\n\t // don't show up in prod but only in __DEV__\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t typeof typeDef[propName] === 'function',\n\t '%s: %s type `%s` is invalid; it must be a function, usually from ' +\n\t 'React.PropTypes.',\n\t Constructor.displayName || 'ReactClass',\n\t ReactPropTypeLocationNames[location],\n\t propName\n\t );\n\t }\n\t }\n\t }\n\t }\n\t\n\t function validateMethodOverride(isAlreadyDefined, name) {\n\t var specPolicy = ReactClassInterface.hasOwnProperty(name)\n\t ? ReactClassInterface[name]\n\t : null;\n\t\n\t // Disallow overriding of base class methods unless explicitly allowed.\n\t if (ReactClassMixin.hasOwnProperty(name)) {\n\t _invariant(\n\t specPolicy === 'OVERRIDE_BASE',\n\t 'ReactClassInterface: You are attempting to override ' +\n\t '`%s` from your class specification. Ensure that your method names ' +\n\t 'do not overlap with React methods.',\n\t name\n\t );\n\t }\n\t\n\t // Disallow defining methods more than once unless explicitly allowed.\n\t if (isAlreadyDefined) {\n\t _invariant(\n\t specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED',\n\t 'ReactClassInterface: You are attempting to define ' +\n\t '`%s` on your component more than once. This conflict may be due ' +\n\t 'to a mixin.',\n\t name\n\t );\n\t }\n\t }\n\t\n\t /**\n\t * Mixin helper which handles policy validation and reserved\n\t * specification keys when building React classes.\n\t */\n\t function mixSpecIntoComponent(Constructor, spec) {\n\t if (!spec) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t var typeofSpec = typeof spec;\n\t var isMixinValid = typeofSpec === 'object' && spec !== null;\n\t\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t isMixinValid,\n\t \"%s: You're attempting to include a mixin that is either null \" +\n\t 'or not an object. Check the mixins included by the component, ' +\n\t 'as well as any mixins they include themselves. ' +\n\t 'Expected object but got %s.',\n\t Constructor.displayName || 'ReactClass',\n\t spec === null ? null : typeofSpec\n\t );\n\t }\n\t }\n\t\n\t return;\n\t }\n\t\n\t _invariant(\n\t typeof spec !== 'function',\n\t \"ReactClass: You're attempting to \" +\n\t 'use a component class or function as a mixin. Instead, just use a ' +\n\t 'regular object.'\n\t );\n\t _invariant(\n\t !isValidElement(spec),\n\t \"ReactClass: You're attempting to \" +\n\t 'use a component as a mixin. Instead, just use a regular object.'\n\t );\n\t\n\t var proto = Constructor.prototype;\n\t var autoBindPairs = proto.__reactAutoBindPairs;\n\t\n\t // By handling mixins before any other properties, we ensure the same\n\t // chaining order is applied to methods with DEFINE_MANY policy, whether\n\t // mixins are listed before or after these methods in the spec.\n\t if (spec.hasOwnProperty(MIXINS_KEY)) {\n\t RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n\t }\n\t\n\t for (var name in spec) {\n\t if (!spec.hasOwnProperty(name)) {\n\t continue;\n\t }\n\t\n\t if (name === MIXINS_KEY) {\n\t // We have already handled mixins in a special case above.\n\t continue;\n\t }\n\t\n\t var property = spec[name];\n\t var isAlreadyDefined = proto.hasOwnProperty(name);\n\t validateMethodOverride(isAlreadyDefined, name);\n\t\n\t if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n\t RESERVED_SPEC_KEYS[name](Constructor, property);\n\t } else {\n\t // Setup methods on prototype:\n\t // The following member methods should not be automatically bound:\n\t // 1. Expected ReactClass methods (in the \"interface\").\n\t // 2. Overridden methods (that were mixed in).\n\t var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n\t var isFunction = typeof property === 'function';\n\t var shouldAutoBind =\n\t isFunction &&\n\t !isReactClassMethod &&\n\t !isAlreadyDefined &&\n\t spec.autobind !== false;\n\t\n\t if (shouldAutoBind) {\n\t autoBindPairs.push(name, property);\n\t proto[name] = property;\n\t } else {\n\t if (isAlreadyDefined) {\n\t var specPolicy = ReactClassInterface[name];\n\t\n\t // These cases should already be caught by validateMethodOverride.\n\t _invariant(\n\t isReactClassMethod &&\n\t (specPolicy === 'DEFINE_MANY_MERGED' ||\n\t specPolicy === 'DEFINE_MANY'),\n\t 'ReactClass: Unexpected spec policy %s for key %s ' +\n\t 'when mixing in component specs.',\n\t specPolicy,\n\t name\n\t );\n\t\n\t // For methods which are defined more than once, call the existing\n\t // methods before calling the new property, merging if appropriate.\n\t if (specPolicy === 'DEFINE_MANY_MERGED') {\n\t proto[name] = createMergedResultFunction(proto[name], property);\n\t } else if (specPolicy === 'DEFINE_MANY') {\n\t proto[name] = createChainedFunction(proto[name], property);\n\t }\n\t } else {\n\t proto[name] = property;\n\t if (process.env.NODE_ENV !== 'production') {\n\t // Add verbose displayName to the function, which helps when looking\n\t // at profiling tools.\n\t if (typeof property === 'function' && spec.displayName) {\n\t proto[name].displayName = spec.displayName + '_' + name;\n\t }\n\t }\n\t }\n\t }\n\t }\n\t }\n\t }\n\t\n\t function mixStaticSpecIntoComponent(Constructor, statics) {\n\t if (!statics) {\n\t return;\n\t }\n\t for (var name in statics) {\n\t var property = statics[name];\n\t if (!statics.hasOwnProperty(name)) {\n\t continue;\n\t }\n\t\n\t var isReserved = name in RESERVED_SPEC_KEYS;\n\t _invariant(\n\t !isReserved,\n\t 'ReactClass: You are attempting to define a reserved ' +\n\t 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' +\n\t 'as an instance property instead; it will still be accessible on the ' +\n\t 'constructor.',\n\t name\n\t );\n\t\n\t var isInherited = name in Constructor;\n\t _invariant(\n\t !isInherited,\n\t 'ReactClass: You are attempting to define ' +\n\t '`%s` on your component more than once. This conflict may be ' +\n\t 'due to a mixin.',\n\t name\n\t );\n\t Constructor[name] = property;\n\t }\n\t }\n\t\n\t /**\n\t * Merge two objects, but throw if both contain the same key.\n\t *\n\t * @param {object} one The first object, which is mutated.\n\t * @param {object} two The second object\n\t * @return {object} one after it has been mutated to contain everything in two.\n\t */\n\t function mergeIntoWithNoDuplicateKeys(one, two) {\n\t _invariant(\n\t one && two && typeof one === 'object' && typeof two === 'object',\n\t 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'\n\t );\n\t\n\t for (var key in two) {\n\t if (two.hasOwnProperty(key)) {\n\t _invariant(\n\t one[key] === undefined,\n\t 'mergeIntoWithNoDuplicateKeys(): ' +\n\t 'Tried to merge two objects with the same key: `%s`. This conflict ' +\n\t 'may be due to a mixin; in particular, this may be caused by two ' +\n\t 'getInitialState() or getDefaultProps() methods returning objects ' +\n\t 'with clashing keys.',\n\t key\n\t );\n\t one[key] = two[key];\n\t }\n\t }\n\t return one;\n\t }\n\t\n\t /**\n\t * Creates a function that invokes two functions and merges their return values.\n\t *\n\t * @param {function} one Function to invoke first.\n\t * @param {function} two Function to invoke second.\n\t * @return {function} Function that invokes the two argument functions.\n\t * @private\n\t */\n\t function createMergedResultFunction(one, two) {\n\t return function mergedResult() {\n\t var a = one.apply(this, arguments);\n\t var b = two.apply(this, arguments);\n\t if (a == null) {\n\t return b;\n\t } else if (b == null) {\n\t return a;\n\t }\n\t var c = {};\n\t mergeIntoWithNoDuplicateKeys(c, a);\n\t mergeIntoWithNoDuplicateKeys(c, b);\n\t return c;\n\t };\n\t }\n\t\n\t /**\n\t * Creates a function that invokes two functions and ignores their return vales.\n\t *\n\t * @param {function} one Function to invoke first.\n\t * @param {function} two Function to invoke second.\n\t * @return {function} Function that invokes the two argument functions.\n\t * @private\n\t */\n\t function createChainedFunction(one, two) {\n\t return function chainedFunction() {\n\t one.apply(this, arguments);\n\t two.apply(this, arguments);\n\t };\n\t }\n\t\n\t /**\n\t * Binds a method to the component.\n\t *\n\t * @param {object} component Component whose method is going to be bound.\n\t * @param {function} method Method to be bound.\n\t * @return {function} The bound method.\n\t */\n\t function bindAutoBindMethod(component, method) {\n\t var boundMethod = method.bind(component);\n\t if (process.env.NODE_ENV !== 'production') {\n\t boundMethod.__reactBoundContext = component;\n\t boundMethod.__reactBoundMethod = method;\n\t boundMethod.__reactBoundArguments = null;\n\t var componentName = component.constructor.displayName;\n\t var _bind = boundMethod.bind;\n\t boundMethod.bind = function(newThis) {\n\t for (\n\t var _len = arguments.length,\n\t args = Array(_len > 1 ? _len - 1 : 0),\n\t _key = 1;\n\t _key < _len;\n\t _key++\n\t ) {\n\t args[_key - 1] = arguments[_key];\n\t }\n\t\n\t // User is trying to bind() an autobound method; we effectively will\n\t // ignore the value of \"this\" that the user is trying to use, so\n\t // let's warn.\n\t if (newThis !== component && newThis !== null) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t false,\n\t 'bind(): React component methods may only be bound to the ' +\n\t 'component instance. See %s',\n\t componentName\n\t );\n\t }\n\t } else if (!args.length) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t false,\n\t 'bind(): You are binding a component method to the component. ' +\n\t 'React does this for you automatically in a high-performance ' +\n\t 'way, so you can safely remove this call. See %s',\n\t componentName\n\t );\n\t }\n\t return boundMethod;\n\t }\n\t var reboundMethod = _bind.apply(boundMethod, arguments);\n\t reboundMethod.__reactBoundContext = component;\n\t reboundMethod.__reactBoundMethod = method;\n\t reboundMethod.__reactBoundArguments = args;\n\t return reboundMethod;\n\t };\n\t }\n\t return boundMethod;\n\t }\n\t\n\t /**\n\t * Binds all auto-bound methods in a component.\n\t *\n\t * @param {object} component Component whose method is going to be bound.\n\t */\n\t function bindAutoBindMethods(component) {\n\t var pairs = component.__reactAutoBindPairs;\n\t for (var i = 0; i < pairs.length; i += 2) {\n\t var autoBindKey = pairs[i];\n\t var method = pairs[i + 1];\n\t component[autoBindKey] = bindAutoBindMethod(component, method);\n\t }\n\t }\n\t\n\t var IsMountedPreMixin = {\n\t componentDidMount: function() {\n\t this.__isMounted = true;\n\t }\n\t };\n\t\n\t var IsMountedPostMixin = {\n\t componentWillUnmount: function() {\n\t this.__isMounted = false;\n\t }\n\t };\n\t\n\t /**\n\t * Add more to the ReactClass base class. These are all legacy features and\n\t * therefore not already part of the modern ReactComponent.\n\t */\n\t var ReactClassMixin = {\n\t /**\n\t * TODO: This will be deprecated because state should always keep a consistent\n\t * type signature and the only use case for this, is to avoid that.\n\t */\n\t replaceState: function(newState, callback) {\n\t this.updater.enqueueReplaceState(this, newState, callback);\n\t },\n\t\n\t /**\n\t * Checks whether or not this composite component is mounted.\n\t * @return {boolean} True if mounted, false otherwise.\n\t * @protected\n\t * @final\n\t */\n\t isMounted: function() {\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t this.__didWarnIsMounted,\n\t '%s: isMounted is deprecated. Instead, make sure to clean up ' +\n\t 'subscriptions and pending requests in componentWillUnmount to ' +\n\t 'prevent memory leaks.',\n\t (this.constructor && this.constructor.displayName) ||\n\t this.name ||\n\t 'Component'\n\t );\n\t this.__didWarnIsMounted = true;\n\t }\n\t return !!this.__isMounted;\n\t }\n\t };\n\t\n\t var ReactClassComponent = function() {};\n\t _assign(\n\t ReactClassComponent.prototype,\n\t ReactComponent.prototype,\n\t ReactClassMixin\n\t );\n\t\n\t /**\n\t * Creates a composite component class given a class specification.\n\t * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n\t *\n\t * @param {object} spec Class specification (which must define `render`).\n\t * @return {function} Component constructor function.\n\t * @public\n\t */\n\t function createClass(spec) {\n\t // To keep our warnings more understandable, we'll use a little hack here to\n\t // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\n\t // unnecessarily identify a class without displayName as 'Constructor'.\n\t var Constructor = identity(function(props, context, updater) {\n\t // This constructor gets overridden by mocks. The argument is used\n\t // by mocks to assert on what gets mounted.\n\t\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t this instanceof Constructor,\n\t 'Something is calling a React component directly. Use a factory or ' +\n\t 'JSX instead. See: https://fb.me/react-legacyfactory'\n\t );\n\t }\n\t\n\t // Wire up auto-binding\n\t if (this.__reactAutoBindPairs.length) {\n\t bindAutoBindMethods(this);\n\t }\n\t\n\t this.props = props;\n\t this.context = context;\n\t this.refs = emptyObject;\n\t this.updater = updater || ReactNoopUpdateQueue;\n\t\n\t this.state = null;\n\t\n\t // ReactClasses doesn't have constructors. Instead, they use the\n\t // getInitialState and componentWillMount methods for initialization.\n\t\n\t var initialState = this.getInitialState ? this.getInitialState() : null;\n\t if (process.env.NODE_ENV !== 'production') {\n\t // We allow auto-mocks to proceed as if they're returning null.\n\t if (\n\t initialState === undefined &&\n\t this.getInitialState._isMockFunction\n\t ) {\n\t // This is probably bad practice. Consider warning here and\n\t // deprecating this convenience.\n\t initialState = null;\n\t }\n\t }\n\t _invariant(\n\t typeof initialState === 'object' && !Array.isArray(initialState),\n\t '%s.getInitialState(): must return an object or null',\n\t Constructor.displayName || 'ReactCompositeComponent'\n\t );\n\t\n\t this.state = initialState;\n\t });\n\t Constructor.prototype = new ReactClassComponent();\n\t Constructor.prototype.constructor = Constructor;\n\t Constructor.prototype.__reactAutoBindPairs = [];\n\t\n\t injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\t\n\t mixSpecIntoComponent(Constructor, IsMountedPreMixin);\n\t mixSpecIntoComponent(Constructor, spec);\n\t mixSpecIntoComponent(Constructor, IsMountedPostMixin);\n\t\n\t // Initialize the defaultProps property after all mixins have been merged.\n\t if (Constructor.getDefaultProps) {\n\t Constructor.defaultProps = Constructor.getDefaultProps();\n\t }\n\t\n\t if (process.env.NODE_ENV !== 'production') {\n\t // This is a tag to indicate that the use of these method names is ok,\n\t // since it's used with createClass. If it's not, then it's likely a\n\t // mistake so we'll warn you to use the static property, property\n\t // initializer or constructor respectively.\n\t if (Constructor.getDefaultProps) {\n\t Constructor.getDefaultProps.isReactClassApproved = {};\n\t }\n\t if (Constructor.prototype.getInitialState) {\n\t Constructor.prototype.getInitialState.isReactClassApproved = {};\n\t }\n\t }\n\t\n\t _invariant(\n\t Constructor.prototype.render,\n\t 'createClass(...): Class specification must implement a `render` method.'\n\t );\n\t\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t !Constructor.prototype.componentShouldUpdate,\n\t '%s has a method called ' +\n\t 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +\n\t 'The name is phrased as a question because the function is ' +\n\t 'expected to return a value.',\n\t spec.displayName || 'A component'\n\t );\n\t warning(\n\t !Constructor.prototype.componentWillRecieveProps,\n\t '%s has a method called ' +\n\t 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',\n\t spec.displayName || 'A component'\n\t );\n\t }\n\t\n\t // Reduce time spent doing lookups by setting these on the prototype.\n\t for (var methodName in ReactClassInterface) {\n\t if (!Constructor.prototype[methodName]) {\n\t Constructor.prototype[methodName] = null;\n\t }\n\t }\n\t\n\t return Constructor;\n\t }\n\t\n\t return createClass;\n\t}\n\t\n\tmodule.exports = factory;\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar emptyObject = {};\n\t\n\tif (process.env.NODE_ENV !== 'production') {\n\t Object.freeze(emptyObject);\n\t}\n\t\n\tmodule.exports = emptyObject;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\tfunction toObj(source) {\n\t return Object.keys(source).reduce(function (output, key) {\n\t var parentKey = key.match(/[^\\[]*/i);\n\t var paths = key.match(/\\[.*?\\]/g) || [];\n\t paths = [parentKey[0]].concat(paths).map(function (key) {\n\t return key.replace(/\\[|\\]/g, '');\n\t });\n\t var currentPath = output;\n\t while (paths.length) {\n\t var pathKey = paths.shift();\n\t\n\t if (pathKey in currentPath) {\n\t currentPath = currentPath[pathKey];\n\t } else {\n\t currentPath[pathKey] = paths.length ? isNaN(paths[0]) ? {} : [] : source[key];\n\t currentPath = currentPath[pathKey];\n\t }\n\t }\n\t\n\t return output;\n\t }, {});\n\t}\n\t\n\tfunction fromObj(obj) {\n\t function recur(newObj, propName, currVal) {\n\t if (Array.isArray(currVal) || Object.prototype.toString.call(currVal) === '[object Object]') {\n\t Object.keys(currVal).forEach(function(v) {\n\t recur(newObj, propName + \"[\" + v + \"]\", currVal[v]);\n\t });\n\t return newObj;\n\t }\n\t\n\t newObj[propName] = currVal;\n\t return newObj;\n\t }\n\t\n\t var keys = Object.keys(obj);\n\t return keys.reduce(function(newObj, propName) {\n\t return recur(newObj, propName, obj[propName]);\n\t }, {});\n\t}\n\t\n\tmodule.exports = {\n\t fromObj: fromObj,\n\t toObj: toObj\n\t}\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n\t/*\n\tobject-assign\n\t(c) Sindre Sorhus\n\t@license MIT\n\t*/\n\t\n\t'use strict';\n\t/* eslint-disable no-unused-vars */\n\tvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\t\n\tfunction toObject(val) {\n\t\tif (val === null || val === undefined) {\n\t\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t\t}\n\t\n\t\treturn Object(val);\n\t}\n\t\n\tfunction shouldUseNative() {\n\t\ttry {\n\t\t\tif (!Object.assign) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// Detect buggy property enumeration order in older V8 versions.\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\t\ttest1[5] = 'de';\n\t\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test2 = {};\n\t\t\tfor (var i = 0; i < 10; i++) {\n\t\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t\t}\n\t\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\t\treturn test2[n];\n\t\t\t});\n\t\t\tif (order2.join('') !== '0123456789') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test3 = {};\n\t\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\t\ttest3[letter] = letter;\n\t\t\t});\n\t\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\treturn true;\n\t\t} catch (err) {\n\t\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\t\tvar from;\n\t\tvar to = toObject(target);\n\t\tvar symbols;\n\t\n\t\tfor (var s = 1; s < arguments.length; s++) {\n\t\t\tfrom = Object(arguments[s]);\n\t\n\t\t\tfor (var key in from) {\n\t\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\t\tto[key] = from[key];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif (getOwnPropertySymbols) {\n\t\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn to;\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {/**\n\t * Copyright 2013-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t */\n\t\n\t'use strict';\n\t\n\tif (process.env.NODE_ENV !== 'production') {\n\t var invariant = __webpack_require__(3);\n\t var warning = __webpack_require__(7);\n\t var ReactPropTypesSecret = __webpack_require__(8);\n\t var loggedTypeFailures = {};\n\t}\n\t\n\t/**\n\t * Assert that the values match with the type specs.\n\t * Error messages are memorized and will only be shown once.\n\t *\n\t * @param {object} typeSpecs Map of name to a ReactPropType\n\t * @param {object} values Runtime values that need to be type-checked\n\t * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n\t * @param {string} componentName Name of the component for error messages.\n\t * @param {?Function} getStack Returns the component stack.\n\t * @private\n\t */\n\tfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t for (var typeSpecName in typeSpecs) {\n\t if (typeSpecs.hasOwnProperty(typeSpecName)) {\n\t var error;\n\t // Prop type validation may throw. In case they do, we don't want to\n\t // fail the render phase where it didn't fail before. So we log it.\n\t // After these have been cleaned up, we'll let them throw.\n\t try {\n\t // This is intentionally an invariant that gets caught. It's the same\n\t // behavior as without this statement except with a better message.\n\t invariant(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', location, typeSpecName);\n\t error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n\t } catch (ex) {\n\t error = ex;\n\t }\n\t warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error);\n\t if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n\t // Only monitor this failure once because there tends to be a lot of the\n\t // same error.\n\t loggedTypeFailures[error.message] = true;\n\t\n\t var stack = getStack ? getStack() : '';\n\t\n\t warning(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : '');\n\t }\n\t }\n\t }\n\t }\n\t}\n\t\n\tmodule.exports = checkPropTypes;\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t */\n\t\n\t'use strict';\n\t\n\tvar emptyFunction = __webpack_require__(6);\n\tvar invariant = __webpack_require__(3);\n\tvar ReactPropTypesSecret = __webpack_require__(8);\n\t\n\tmodule.exports = function() {\n\t function shim(props, propName, componentName, location, propFullName, secret) {\n\t if (secret === ReactPropTypesSecret) {\n\t // It is still safe when called from React.\n\t return;\n\t }\n\t invariant(\n\t false,\n\t 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n\t 'Use PropTypes.checkPropTypes() to call them. ' +\n\t 'Read more at http://fb.me/use-check-prop-types'\n\t );\n\t };\n\t shim.isRequired = shim;\n\t function getShim() {\n\t return shim;\n\t };\n\t // Important!\n\t // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n\t var ReactPropTypes = {\n\t array: shim,\n\t bool: shim,\n\t func: shim,\n\t number: shim,\n\t object: shim,\n\t string: shim,\n\t symbol: shim,\n\t\n\t any: shim,\n\t arrayOf: getShim,\n\t element: shim,\n\t instanceOf: getShim,\n\t node: shim,\n\t objectOf: getShim,\n\t oneOf: getShim,\n\t oneOfType: getShim,\n\t shape: getShim\n\t };\n\t\n\t ReactPropTypes.checkPropTypes = emptyFunction;\n\t ReactPropTypes.PropTypes = ReactPropTypes;\n\t\n\t return ReactPropTypes;\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {/**\n\t * Copyright 2013-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t */\n\t\n\t'use strict';\n\t\n\tvar emptyFunction = __webpack_require__(6);\n\tvar invariant = __webpack_require__(3);\n\tvar warning = __webpack_require__(7);\n\t\n\tvar ReactPropTypesSecret = __webpack_require__(8);\n\tvar checkPropTypes = __webpack_require__(18);\n\t\n\tmodule.exports = function(isValidElement, throwOnDirectAccess) {\n\t /* global Symbol */\n\t var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n\t var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\t\n\t /**\n\t * Returns the iterator method function contained on the iterable object.\n\t *\n\t * Be sure to invoke the function with the iterable as context:\n\t *\n\t * var iteratorFn = getIteratorFn(myIterable);\n\t * if (iteratorFn) {\n\t * var iterator = iteratorFn.call(myIterable);\n\t * ...\n\t * }\n\t *\n\t * @param {?object} maybeIterable\n\t * @return {?function}\n\t */\n\t function getIteratorFn(maybeIterable) {\n\t var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n\t if (typeof iteratorFn === 'function') {\n\t return iteratorFn;\n\t }\n\t }\n\t\n\t /**\n\t * Collection of methods that allow declaration and validation of props that are\n\t * supplied to React components. Example usage:\n\t *\n\t * var Props = require('ReactPropTypes');\n\t * var MyArticle = React.createClass({\n\t * propTypes: {\n\t * // An optional string prop named \"description\".\n\t * description: Props.string,\n\t *\n\t * // A required enum prop named \"category\".\n\t * category: Props.oneOf(['News','Photos']).isRequired,\n\t *\n\t * // A prop named \"dialog\" that requires an instance of Dialog.\n\t * dialog: Props.instanceOf(Dialog).isRequired\n\t * },\n\t * render: function() { ... }\n\t * });\n\t *\n\t * A more formal specification of how these methods are used:\n\t *\n\t * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n\t * decl := ReactPropTypes.{type}(.isRequired)?\n\t *\n\t * Each and every declaration produces a function with the same signature. This\n\t * allows the creation of custom validation functions. For example:\n\t *\n\t * var MyLink = React.createClass({\n\t * propTypes: {\n\t * // An optional string or URI prop named \"href\".\n\t * href: function(props, propName, componentName) {\n\t * var propValue = props[propName];\n\t * if (propValue != null && typeof propValue !== 'string' &&\n\t * !(propValue instanceof URI)) {\n\t * return new Error(\n\t * 'Expected a string or an URI for ' + propName + ' in ' +\n\t * componentName\n\t * );\n\t * }\n\t * }\n\t * },\n\t * render: function() {...}\n\t * });\n\t *\n\t * @internal\n\t */\n\t\n\t var ANONYMOUS = '<>';\n\t\n\t // Important!\n\t // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n\t var ReactPropTypes = {\n\t array: createPrimitiveTypeChecker('array'),\n\t bool: createPrimitiveTypeChecker('boolean'),\n\t func: createPrimitiveTypeChecker('function'),\n\t number: createPrimitiveTypeChecker('number'),\n\t object: createPrimitiveTypeChecker('object'),\n\t string: createPrimitiveTypeChecker('string'),\n\t symbol: createPrimitiveTypeChecker('symbol'),\n\t\n\t any: createAnyTypeChecker(),\n\t arrayOf: createArrayOfTypeChecker,\n\t element: createElementTypeChecker(),\n\t instanceOf: createInstanceTypeChecker,\n\t node: createNodeChecker(),\n\t objectOf: createObjectOfTypeChecker,\n\t oneOf: createEnumTypeChecker,\n\t oneOfType: createUnionTypeChecker,\n\t shape: createShapeTypeChecker\n\t };\n\t\n\t /**\n\t * inlined Object.is polyfill to avoid requiring consumers ship their own\n\t * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n\t */\n\t /*eslint-disable no-self-compare*/\n\t function is(x, y) {\n\t // SameValue algorithm\n\t if (x === y) {\n\t // Steps 1-5, 7-10\n\t // Steps 6.b-6.e: +0 != -0\n\t return x !== 0 || 1 / x === 1 / y;\n\t } else {\n\t // Step 6.a: NaN == NaN\n\t return x !== x && y !== y;\n\t }\n\t }\n\t /*eslint-enable no-self-compare*/\n\t\n\t /**\n\t * We use an Error-like object for backward compatibility as people may call\n\t * PropTypes directly and inspect their output. However, we don't use real\n\t * Errors anymore. We don't inspect their stack anyway, and creating them\n\t * is prohibitively expensive if they are created too often, such as what\n\t * happens in oneOfType() for any type before the one that matched.\n\t */\n\t function PropTypeError(message) {\n\t this.message = message;\n\t this.stack = '';\n\t }\n\t // Make `instanceof Error` still work for returned errors.\n\t PropTypeError.prototype = Error.prototype;\n\t\n\t function createChainableTypeChecker(validate) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t var manualPropTypeCallCache = {};\n\t var manualPropTypeWarningCount = 0;\n\t }\n\t function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n\t componentName = componentName || ANONYMOUS;\n\t propFullName = propFullName || propName;\n\t\n\t if (secret !== ReactPropTypesSecret) {\n\t if (throwOnDirectAccess) {\n\t // New behavior only for users of `prop-types` package\n\t invariant(\n\t false,\n\t 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n\t 'Use `PropTypes.checkPropTypes()` to call them. ' +\n\t 'Read more at http://fb.me/use-check-prop-types'\n\t );\n\t } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n\t // Old behavior for people using React.PropTypes\n\t var cacheKey = componentName + ':' + propName;\n\t if (\n\t !manualPropTypeCallCache[cacheKey] &&\n\t // Avoid spamming the console because they are often not actionable except for lib authors\n\t manualPropTypeWarningCount < 3\n\t ) {\n\t warning(\n\t false,\n\t 'You are manually calling a React.PropTypes validation ' +\n\t 'function for the `%s` prop on `%s`. This is deprecated ' +\n\t 'and will throw in the standalone `prop-types` package. ' +\n\t 'You may be seeing this warning due to a third-party PropTypes ' +\n\t 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.',\n\t propFullName,\n\t componentName\n\t );\n\t manualPropTypeCallCache[cacheKey] = true;\n\t manualPropTypeWarningCount++;\n\t }\n\t }\n\t }\n\t if (props[propName] == null) {\n\t if (isRequired) {\n\t if (props[propName] === null) {\n\t return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n\t }\n\t return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n\t }\n\t return null;\n\t } else {\n\t return validate(props, propName, componentName, location, propFullName);\n\t }\n\t }\n\t\n\t var chainedCheckType = checkType.bind(null, false);\n\t chainedCheckType.isRequired = checkType.bind(null, true);\n\t\n\t return chainedCheckType;\n\t }\n\t\n\t function createPrimitiveTypeChecker(expectedType) {\n\t function validate(props, propName, componentName, location, propFullName, secret) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== expectedType) {\n\t // `propValue` being instance of, say, date/regexp, pass the 'object'\n\t // check, but we can offer a more precise error message here rather than\n\t // 'of type `object`'.\n\t var preciseType = getPreciseType(propValue);\n\t\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createAnyTypeChecker() {\n\t return createChainableTypeChecker(emptyFunction.thatReturnsNull);\n\t }\n\t\n\t function createArrayOfTypeChecker(typeChecker) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (typeof typeChecker !== 'function') {\n\t return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n\t }\n\t var propValue = props[propName];\n\t if (!Array.isArray(propValue)) {\n\t var propType = getPropType(propValue);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n\t }\n\t for (var i = 0; i < propValue.length; i++) {\n\t var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n\t if (error instanceof Error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createElementTypeChecker() {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t if (!isValidElement(propValue)) {\n\t var propType = getPropType(propValue);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createInstanceTypeChecker(expectedClass) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (!(props[propName] instanceof expectedClass)) {\n\t var expectedClassName = expectedClass.name || ANONYMOUS;\n\t var actualClassName = getClassName(props[propName]);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createEnumTypeChecker(expectedValues) {\n\t if (!Array.isArray(expectedValues)) {\n\t process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;\n\t return emptyFunction.thatReturnsNull;\n\t }\n\t\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t for (var i = 0; i < expectedValues.length; i++) {\n\t if (is(propValue, expectedValues[i])) {\n\t return null;\n\t }\n\t }\n\t\n\t var valuesString = JSON.stringify(expectedValues);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createObjectOfTypeChecker(typeChecker) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (typeof typeChecker !== 'function') {\n\t return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n\t }\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n\t }\n\t for (var key in propValue) {\n\t if (propValue.hasOwnProperty(key)) {\n\t var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n\t if (error instanceof Error) {\n\t return error;\n\t }\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createUnionTypeChecker(arrayOfTypeCheckers) {\n\t if (!Array.isArray(arrayOfTypeCheckers)) {\n\t process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n\t return emptyFunction.thatReturnsNull;\n\t }\n\t\n\t for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n\t var checker = arrayOfTypeCheckers[i];\n\t if (typeof checker !== 'function') {\n\t warning(\n\t false,\n\t 'Invalid argument supplid to oneOfType. Expected an array of check functions, but ' +\n\t 'received %s at index %s.',\n\t getPostfixForTypeWarning(checker),\n\t i\n\t );\n\t return emptyFunction.thatReturnsNull;\n\t }\n\t }\n\t\n\t function validate(props, propName, componentName, location, propFullName) {\n\t for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n\t var checker = arrayOfTypeCheckers[i];\n\t if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n\t return null;\n\t }\n\t }\n\t\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createNodeChecker() {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (!isNode(props[propName])) {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createShapeTypeChecker(shapeTypes) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n\t }\n\t for (var key in shapeTypes) {\n\t var checker = shapeTypes[key];\n\t if (!checker) {\n\t continue;\n\t }\n\t var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n\t if (error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function isNode(propValue) {\n\t switch (typeof propValue) {\n\t case 'number':\n\t case 'string':\n\t case 'undefined':\n\t return true;\n\t case 'boolean':\n\t return !propValue;\n\t case 'object':\n\t if (Array.isArray(propValue)) {\n\t return propValue.every(isNode);\n\t }\n\t if (propValue === null || isValidElement(propValue)) {\n\t return true;\n\t }\n\t\n\t var iteratorFn = getIteratorFn(propValue);\n\t if (iteratorFn) {\n\t var iterator = iteratorFn.call(propValue);\n\t var step;\n\t if (iteratorFn !== propValue.entries) {\n\t while (!(step = iterator.next()).done) {\n\t if (!isNode(step.value)) {\n\t return false;\n\t }\n\t }\n\t } else {\n\t // Iterator will provide entry [k,v] tuples rather than values.\n\t while (!(step = iterator.next()).done) {\n\t var entry = step.value;\n\t if (entry) {\n\t if (!isNode(entry[1])) {\n\t return false;\n\t }\n\t }\n\t }\n\t }\n\t } else {\n\t return false;\n\t }\n\t\n\t return true;\n\t default:\n\t return false;\n\t }\n\t }\n\t\n\t function isSymbol(propType, propValue) {\n\t // Native Symbol.\n\t if (propType === 'symbol') {\n\t return true;\n\t }\n\t\n\t // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n\t if (propValue['@@toStringTag'] === 'Symbol') {\n\t return true;\n\t }\n\t\n\t // Fallback for non-spec compliant Symbols which are polyfilled.\n\t if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n\t return true;\n\t }\n\t\n\t return false;\n\t }\n\t\n\t // Equivalent of `typeof` but with special handling for array and regexp.\n\t function getPropType(propValue) {\n\t var propType = typeof propValue;\n\t if (Array.isArray(propValue)) {\n\t return 'array';\n\t }\n\t if (propValue instanceof RegExp) {\n\t // Old webkits (at least until Android 4.0) return 'function' rather than\n\t // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n\t // passes PropTypes.object.\n\t return 'object';\n\t }\n\t if (isSymbol(propType, propValue)) {\n\t return 'symbol';\n\t }\n\t return propType;\n\t }\n\t\n\t // This handles more types than `getPropType`. Only used for error messages.\n\t // See `createPrimitiveTypeChecker`.\n\t function getPreciseType(propValue) {\n\t if (typeof propValue === 'undefined' || propValue === null) {\n\t return '' + propValue;\n\t }\n\t var propType = getPropType(propValue);\n\t if (propType === 'object') {\n\t if (propValue instanceof Date) {\n\t return 'date';\n\t } else if (propValue instanceof RegExp) {\n\t return 'regexp';\n\t }\n\t }\n\t return propType;\n\t }\n\t\n\t // Returns a string that is postfixed to a warning about an invalid type.\n\t // For example, \"undefined\" or \"of type array\"\n\t function getPostfixForTypeWarning(value) {\n\t var type = getPreciseType(value);\n\t switch (type) {\n\t case 'array':\n\t case 'object':\n\t return 'an ' + type;\n\t case 'boolean':\n\t case 'date':\n\t case 'regexp':\n\t return 'a ' + type;\n\t default:\n\t return type;\n\t }\n\t }\n\t\n\t // Returns class name of the object, if any.\n\t function getClassName(propValue) {\n\t if (!propValue.constructor || !propValue.constructor.name) {\n\t return ANONYMOUS;\n\t }\n\t return propValue.constructor.name;\n\t }\n\t\n\t ReactPropTypes.checkPropTypes = checkPropTypes;\n\t ReactPropTypes.PropTypes = ReactPropTypes;\n\t\n\t return ReactPropTypes;\n\t};\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// formsy-react.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 67aa5951eee519299929","var PropTypes = require('prop-types');\nvar React = global.React || require('react');\nvar createReactClass = require('create-react-class');\nvar Formsy = {};\nvar validationRules = require('./validationRules.js');\nvar formDataToObject = require('form-data-to-object');\nvar utils = require('./utils.js');\nvar Mixin = require('./Mixin.js');\nvar HOC = require('./HOC.js');\nvar Decorator = require('./Decorator.js');\nvar options = {};\nvar emptyArray = [];\n\nFormsy.Mixin = Mixin;\nFormsy.HOC = HOC;\nFormsy.Decorator = Decorator;\n\nFormsy.defaults = function (passedOptions) {\n options = passedOptions;\n};\n\nFormsy.addValidationRule = function (name, func) {\n validationRules[name] = func;\n};\n\nFormsy.Form = createReactClass({\n displayName: 'Formsy',\n getInitialState: function () {\n return {\n isValid: true,\n isSubmitting: false,\n canChange: false\n };\n },\n getDefaultProps: function () {\n return {\n onSuccess: function () {},\n onError: function () {},\n onSubmit: function () {},\n onValidSubmit: function () {},\n onInvalidSubmit: function () {},\n onValid: function () {},\n onInvalid: function () {},\n onChange: function () {},\n validationErrors: null,\n preventExternalInvalidation: false\n };\n },\n\n childContextTypes: {\n formsy: PropTypes.object\n },\n getChildContext: function () {\n return {\n formsy: {\n attachToForm: this.attachToForm,\n detachFromForm: this.detachFromForm,\n validate: this.validate,\n isFormDisabled: this.isFormDisabled,\n isValidValue: (component, value) => {\n return this.runValidation(component, value).isValid;\n }\n }\n }\n },\n\n // Add a map to store the inputs of the form, a model to store\n // the values of the form and register child inputs\n componentWillMount: function () {\n this.inputs = [];\n },\n\n componentDidMount: function () {\n this.validateForm();\n },\n\n componentWillUpdate: function () {\n // Keep a reference to input names before form updates,\n // to check if inputs has changed after render\n this.prevInputNames = this.inputs.map(component => component.props.name);\n },\n\n componentDidUpdate: function () {\n\n if (this.props.validationErrors && typeof this.props.validationErrors === 'object' && Object.keys(this.props.validationErrors).length > 0) {\n this.setInputValidationErrors(this.props.validationErrors);\n }\n\n var newInputNames = this.inputs.map(component => component.props.name);\n if (utils.arraysDiffer(this.prevInputNames, newInputNames)) {\n this.validateForm();\n }\n\n },\n\n // Allow resetting to specified data\n reset: function (data) {\n this.setFormPristine(true);\n this.resetModel(data);\n },\n\n // Update model, submit to url prop and send the model\n submit: function (event) {\n\n event && event.preventDefault();\n\n // Trigger form as not pristine.\n // If any inputs have not been touched yet this will make them dirty\n // so validation becomes visible (if based on isPristine)\n this.setFormPristine(false);\n var model = this.getModel();\n this.props.onSubmit(model, this.resetModel, this.updateInputsWithError);\n this.state.isValid ? this.props.onValidSubmit(model, this.resetModel, this.updateInputsWithError) : this.props.onInvalidSubmit(model, this.resetModel, this.updateInputsWithError);\n\n },\n\n mapModel: function (model) {\n\n if (this.props.mapping) {\n return this.props.mapping(model)\n } else {\n return formDataToObject.toObj(Object.keys(model).reduce((mappedModel, key) => {\n\n var keyArray = key.split('.');\n var base = mappedModel;\n while (keyArray.length) {\n var currentKey = keyArray.shift();\n base = (base[currentKey] = keyArray.length ? base[currentKey] || {} : model[key]);\n }\n\n return mappedModel;\n\n }, {}));\n }\n },\n\n getModel: function () {\n var currentValues = this.getCurrentValues();\n return this.mapModel(currentValues);\n },\n\n // Reset each key in the model to the original / initial / specified value\n resetModel: function (data) {\n this.inputs.forEach(component => {\n var name = component.props.name;\n if (data && data.hasOwnProperty(name)) {\n component.setValue(data[name]);\n } else {\n component.resetValue();\n }\n });\n this.validateForm();\n },\n\n setInputValidationErrors: function (errors) {\n this.inputs.forEach(component => {\n var name = component.props.name;\n var args = [{\n _isValid: !(name in errors),\n _validationError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n }];\n component.setState.apply(component, args);\n });\n },\n\n // Checks if the values have changed from their initial value\n isChanged: function() {\n return !utils.isSame(this.getPristineValues(), this.getCurrentValues());\n },\n\n getPristineValues: function() {\n return this.inputs.reduce((data, component) => {\n var name = component.props.name;\n data[name] = component.props.value;\n return data;\n }, {});\n },\n\n // Go through errors from server and grab the components\n // stored in the inputs map. Change their state to invalid\n // and set the serverError message\n updateInputsWithError: function (errors) {\n Object.keys(errors).forEach((name, index) => {\n var component = utils.find(this.inputs, component => component.props.name === name);\n if (!component) {\n throw new Error('You are trying to update an input that does not exist. ' +\n 'Verify errors object with input names. ' + JSON.stringify(errors));\n }\n var args = [{\n _isValid: this.props.preventExternalInvalidation || false,\n _externalError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n }];\n component.setState.apply(component, args);\n });\n },\n\n isFormDisabled: function () {\n return this.props.disabled;\n },\n\n getCurrentValues: function () {\n return this.inputs.reduce((data, component) => {\n var name = component.props.name;\n data[name] = component.state._value;\n return data;\n }, {});\n },\n\n setFormPristine: function (isPristine) {\n this.setState({\n _formSubmitted: !isPristine\n });\n\n // Iterate through each component and set it as pristine\n // or \"dirty\".\n this.inputs.forEach((component, index) => {\n component.setState({\n _formSubmitted: !isPristine,\n _isPristine: isPristine\n });\n });\n },\n\n // Use the binded values and the actual input value to\n // validate the input and set its state. Then check the\n // state of the form itself\n validate: function (component) {\n\n // Trigger onChange\n if (this.state.canChange) {\n this.props.onChange(this.getCurrentValues(), this.isChanged());\n }\n\n var validation = this.runValidation(component);\n // Run through the validations, split them up and call\n // the validator IF there is a value or it is required\n component.setState({\n _isValid: validation.isValid,\n _isRequired: validation.isRequired,\n _validationError: validation.error,\n _externalError: null\n }, this.validateForm);\n\n },\n\n // Checks validation on current value or a passed value\n runValidation: function (component, value) {\n\n var currentValues = this.getCurrentValues();\n var validationErrors = component.props.validationErrors;\n var validationError = component.props.validationError;\n value = arguments.length === 2 ? value : component.state._value;\n\n var validationResults = this.runRules(value, currentValues, component._validations);\n var requiredResults = this.runRules(value, currentValues, component._requiredValidations);\n\n // the component defines an explicit validate function\n if (typeof component.validate === \"function\") {\n validationResults.failed = component.validate() ? [] : ['failed'];\n }\n\n var isRequired = Object.keys(component._requiredValidations).length ? !!requiredResults.success.length : false;\n var isValid = !validationResults.failed.length && !(this.props.validationErrors && this.props.validationErrors[component.props.name]);\n\n return {\n isRequired: isRequired,\n isValid: isRequired ? false : isValid,\n error: (function () {\n\n if (isValid && !isRequired) {\n return emptyArray;\n }\n\n if (validationResults.errors.length) {\n return validationResults.errors;\n }\n\n if (this.props.validationErrors && this.props.validationErrors[component.props.name]) {\n return typeof this.props.validationErrors[component.props.name] === 'string' ? [this.props.validationErrors[component.props.name]] : this.props.validationErrors[component.props.name];\n }\n\n if (isRequired) {\n var error = validationErrors[requiredResults.success[0]];\n return error ? [error] : null;\n }\n\n if (validationResults.failed.length) {\n return validationResults.failed.map(function(failed) {\n return validationErrors[failed] ? validationErrors[failed] : validationError;\n }).filter(function(x, pos, arr) {\n // Remove duplicates\n return arr.indexOf(x) === pos;\n });\n }\n\n }.call(this))\n };\n\n },\n\n runRules: function (value, currentValues, validations) {\n\n var results = {\n errors: [],\n failed: [],\n success: []\n };\n if (Object.keys(validations).length) {\n Object.keys(validations).forEach(function (validationMethod) {\n\n if (validationRules[validationMethod] && typeof validations[validationMethod] === 'function') {\n throw new Error('Formsy does not allow you to override default validations: ' + validationMethod);\n }\n\n if (!validationRules[validationMethod] && typeof validations[validationMethod] !== 'function') {\n throw new Error('Formsy does not have the validation rule: ' + validationMethod);\n }\n\n if (typeof validations[validationMethod] === 'function') {\n var validation = validations[validationMethod](currentValues, value);\n if (typeof validation === 'string') {\n results.errors.push(validation);\n results.failed.push(validationMethod);\n } else if (!validation) {\n results.failed.push(validationMethod);\n }\n return;\n\n } else if (typeof validations[validationMethod] !== 'function') {\n var validation = validationRules[validationMethod](currentValues, value, validations[validationMethod]);\n if (typeof validation === 'string') {\n results.errors.push(validation);\n results.failed.push(validationMethod);\n } else if (!validation) {\n results.failed.push(validationMethod);\n } else {\n results.success.push(validationMethod);\n }\n return;\n\n }\n\n return results.success.push(validationMethod);\n\n });\n }\n\n return results;\n\n },\n\n // Validate the form by going through all child input components\n // and check their state\n validateForm: function () {\n\n // We need a callback as we are validating all inputs again. This will\n // run when the last component has set its state\n var onValidationComplete = function () {\n var allIsValid = this.inputs.every(component => {\n return component.state._isValid;\n });\n\n this.setState({\n isValid: allIsValid\n });\n\n if (allIsValid) {\n this.props.onValid();\n } else {\n this.props.onInvalid();\n }\n\n // Tell the form that it can start to trigger change events\n this.setState({\n canChange: true\n });\n\n }.bind(this);\n\n // Run validation again in case affected by other inputs. The\n // last component validated will run the onValidationComplete callback\n this.inputs.forEach((component, index) => {\n var validation = this.runValidation(component);\n if (validation.isValid && component.state._externalError) {\n validation.isValid = false;\n }\n component.setState({\n _isValid: validation.isValid,\n _isRequired: validation.isRequired,\n _validationError: validation.error,\n _externalError: !validation.isValid && component.state._externalError ? component.state._externalError : null\n }, index === this.inputs.length - 1 ? onValidationComplete : null);\n });\n\n // If there are no inputs, set state where form is ready to trigger\n // change event. New inputs might be added later\n if (!this.inputs.length) {\n this.setState({\n canChange: true\n });\n }\n },\n\n // Method put on each input component to register\n // itself to the form\n attachToForm: function (component) {\n\n if (this.inputs.indexOf(component) === -1) {\n this.inputs.push(component);\n }\n\n this.validate(component);\n },\n\n // Method put on each input component to unregister\n // itself from the form\n detachFromForm: function (component) {\n var componentPos = this.inputs.indexOf(component);\n\n if (componentPos !== -1) {\n this.inputs = this.inputs.slice(0, componentPos)\n .concat(this.inputs.slice(componentPos + 1));\n }\n\n this.validateForm();\n },\n render: function () {\n var {\n mapping,\n validationErrors,\n onSubmit,\n onValid,\n onValidSubmit,\n onInvalid,\n onInvalidSubmit,\n onChange,\n reset,\n preventExternalInvalidation,\n onSuccess,\n onError,\n ...nonFormsyProps\n } = this.props;\n\n return (\n
\n {this.props.children}\n
\n );\n\n }\n});\n\nif (!global.exports && !global.module && (!global.define || !global.define.amd)) {\n global.Formsy = Formsy;\n}\n\nmodule.exports = Formsy;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 1\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react\"\n// module id = 2\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (process.env.NODE_ENV !== 'production') {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/fbjs/lib/invariant.js\n// module id = 3\n// module chunks = 0","var PropTypes = require('prop-types');\nvar utils = require('./utils.js');\nvar React = global.React || require('react');\n\nvar convertValidationsToObject = function (validations) {\n\n if (typeof validations === 'string') {\n\n return validations.split(/\\,(?![^{\\[]*[}\\]])/g).reduce(function (validations, validation) {\n var args = validation.split(':');\n var validateMethod = args.shift();\n\n args = args.map(function (arg) {\n try {\n return JSON.parse(arg);\n } catch (e) {\n return arg; // It is a string if it can not parse it\n }\n });\n\n if (args.length > 1) {\n throw new Error('Formsy does not support multiple args on string validations. Use object format of validations instead.');\n }\n\n validations[validateMethod] = args.length ? args[0] : true;\n return validations;\n }, {});\n\n }\n\n return validations || {};\n};\n\nmodule.exports = {\n getInitialState: function () {\n return {\n _value: this.props.value,\n _isRequired: false,\n _isValid: true,\n _isPristine: true,\n _pristineValue: this.props.value,\n _validationError: [],\n _externalError: null,\n _formSubmitted: false\n };\n },\n contextTypes: {\n formsy: PropTypes.object // What about required?\n },\n getDefaultProps: function () {\n return {\n validationError: '',\n validationErrors: {}\n };\n },\n\n componentWillMount: function () {\n var configure = function () {\n this.setValidations(this.props.validations, this.props.required);\n\n // Pass a function instead?\n this.context.formsy.attachToForm(this);\n //this.props._attachToForm(this);\n }.bind(this);\n\n if (!this.props.name) {\n throw new Error('Form Input requires a name property when used');\n }\n\n /*\n if (!this.props._attachToForm) {\n return setTimeout(function () {\n if (!this.isMounted()) return;\n if (!this.props._attachToForm) {\n throw new Error('Form Mixin requires component to be nested in a Form');\n }\n configure();\n }.bind(this), 0);\n }\n */\n configure();\n },\n\n // We have to make the validate method is kept when new props are added\n componentWillReceiveProps: function (nextProps) {\n this.setValidations(nextProps.validations, nextProps.required);\n\n },\n\n componentDidUpdate: function (prevProps) {\n\n // If the value passed has changed, set it. If value is not passed it will\n // internally update, and this will never run\n if (!utils.isSame(this.props.value, prevProps.value)) {\n this.setValue(this.props.value);\n }\n\n // If validations or required is changed, run a new validation\n if (!utils.isSame(this.props.validations, prevProps.validations) || !utils.isSame(this.props.required, prevProps.required)) {\n this.context.formsy.validate(this);\n }\n },\n\n // Detach it when component unmounts\n componentWillUnmount: function () {\n this.context.formsy.detachFromForm(this);\n //this.props._detachFromForm(this);\n },\n\n setValidations: function (validations, required) {\n\n // Add validations to the store itself as the props object can not be modified\n this._validations = convertValidationsToObject(validations) || {};\n this._requiredValidations = required === true ? {isDefaultRequiredValue: true} : convertValidationsToObject(required);\n\n },\n\n // We validate after the value has been set\n setValue: function (value) {\n this.setState({\n _value: value,\n _isPristine: false\n }, function () {\n this.context.formsy.validate(this);\n //this.props._validate(this);\n }.bind(this));\n },\n resetValue: function () {\n this.setState({\n _value: this.state._pristineValue,\n _isPristine: true\n }, function () {\n this.context.formsy.validate(this);\n //this.props._validate(this);\n });\n },\n getValue: function () {\n return this.state._value;\n },\n hasValue: function () {\n return this.state._value !== '';\n },\n getErrorMessage: function () {\n var messages = this.getErrorMessages();\n return messages.length ? messages[0] : null;\n },\n getErrorMessages: function () {\n return !this.isValid() || this.showRequired() ? (this.state._externalError || this.state._validationError || []) : [];\n },\n isFormDisabled: function () {\n return this.context.formsy.isFormDisabled();\n //return this.props._isFormDisabled();\n },\n isValid: function () {\n return this.state._isValid;\n },\n isPristine: function () {\n return this.state._isPristine;\n },\n isFormSubmitted: function () {\n return this.state._formSubmitted;\n },\n isRequired: function () {\n return !!this.props.required;\n },\n showRequired: function () {\n return this.state._isRequired;\n },\n showError: function () {\n return !this.showRequired() && !this.isValid();\n },\n isValidValue: function (value) {\n return this.context.formsy.isValidValue.call(null, this, value);\n //return this.props._isValidValue.call(null, this, value);\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/Mixin.js","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar React = require('react');\nvar factory = require('./factory');\n\nif (typeof React === 'undefined') {\n throw Error(\n 'create-react-class could not find the React object. If you are using script tags, ' +\n 'make sure that React is being loaded before create-react-class.'\n );\n}\n\n// Hack to grab NoopUpdateQueue from isomorphic React\nvar ReactNoopUpdateQueue = new React.Component().updater;\n\nmodule.exports = factory(\n React.Component,\n React.isValidElement,\n ReactNoopUpdateQueue\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/create-react-class/index.js\n// module id = 5\n// module chunks = 0","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/fbjs/lib/emptyFunction.js\n// module id = 6\n// module chunks = 0","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n (function () {\n var printWarning = function printWarning(format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n warning = function warning(condition, format) {\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (format.indexOf('Failed Composite propType: ') === 0) {\n return; // Ignore CompositeComponent proptype check.\n }\n\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n })();\n}\n\nmodule.exports = warning;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/fbjs/lib/warning.js\n// module id = 7\n// module chunks = 0","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/prop-types/lib/ReactPropTypesSecret.js\n// module id = 8\n// module chunks = 0","module.exports = {\n arraysDiffer: function (a, b) {\n var isDifferent = false;\n if (a.length !== b.length) {\n isDifferent = true;\n } else {\n a.forEach(function (item, index) {\n if (!this.isSame(item, b[index])) {\n isDifferent = true;\n }\n }, this);\n }\n return isDifferent;\n },\n\n objectsDiffer: function (a, b) {\n var isDifferent = false;\n if (Object.keys(a).length !== Object.keys(b).length) {\n isDifferent = true;\n } else {\n Object.keys(a).forEach(function (key) {\n if (!this.isSame(a[key], b[key])) {\n isDifferent = true;\n }\n }, this);\n }\n return isDifferent;\n },\n\n isSame: function (a, b) {\n if (typeof a !== typeof b) {\n return false;\n } else if (Array.isArray(a) && Array.isArray(b)) {\n return !this.arraysDiffer(a, b);\n } else if (typeof a === 'function') {\n return a.toString() === b.toString();\n } else if (typeof a === 'object' && a !== null && b !== null) {\n return !this.objectsDiffer(a, b);\n }\n\n return a === b;\n },\n\n find: function (collection, fn) {\n for (var i = 0, l = collection.length; i < l; i++) {\n var item = collection[i];\n if (fn(item)) {\n return item;\n }\n }\n return null;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils.js","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/prop-types/index.js\n// module id = 10\n// module chunks = 0","var React = global.React || require('react');\nvar createReactClass = require('create-react-class');\nvar Mixin = require('./Mixin.js');\nmodule.exports = function () {\n return function (Component) {\n return createReactClass({\n mixins: [Mixin],\n render: function () {\n return React.createElement(Component, {\n setValidations: this.setValidations,\n setValue: this.setValue,\n resetValue: this.resetValue,\n getValue: this.getValue,\n hasValue: this.hasValue,\n getErrorMessage: this.getErrorMessage,\n getErrorMessages: this.getErrorMessages,\n isFormDisabled: this.isFormDisabled,\n isValid: this.isValid,\n isPristine: this.isPristine,\n isFormSubmitted: this.isFormSubmitted,\n isRequired: this.isRequired,\n showRequired: this.showRequired,\n showError: this.showError,\n isValidValue: this.isValidValue,\n ...this.props\n });\n }\n });\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/Decorator.js","var React = global.React || require('react');\nvar createReactClass = require('create-react-class');\nvar Mixin = require('./Mixin.js');\nmodule.exports = function (Component) {\n return createReactClass({\n displayName: 'Formsy(' + getDisplayName(Component) + ')',\n mixins: [Mixin],\n\n render: function () {\n const { innerRef } = this.props;\n const propsForElement = {\n setValidations: this.setValidations,\n setValue: this.setValue,\n resetValue: this.resetValue,\n getValue: this.getValue,\n hasValue: this.hasValue,\n getErrorMessage: this.getErrorMessage,\n getErrorMessages: this.getErrorMessages,\n isFormDisabled: this.isFormDisabled,\n isValid: this.isValid,\n isPristine: this.isPristine,\n isFormSubmitted: this.isFormSubmitted,\n isRequired: this.isRequired,\n showRequired: this.showRequired,\n showError: this.showError,\n isValidValue: this.isValidValue,\n ...this.props\n };\n\n if (innerRef) {\n propsForElement.ref = innerRef;\n }\n return React.createElement(Component, propsForElement);\n }\n });\n};\n\nfunction getDisplayName(Component) {\n return (\n Component.displayName ||\n Component.name ||\n (typeof Component === 'string' ? Component : 'Component')\n );\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/HOC.js","var isExisty = function (value) {\n return value !== null && value !== undefined;\n};\n\nvar isEmpty = function (value) {\n return value === '';\n};\n\nvar validations = {\n isDefaultRequiredValue: function (values, value) {\n return value === undefined || value === '';\n },\n isExisty: function (values, value) {\n return isExisty(value);\n },\n matchRegexp: function (values, value, regexp) {\n return !isExisty(value) || isEmpty(value) || regexp.test(value);\n },\n isUndefined: function (values, value) {\n return value === undefined;\n },\n isEmptyString: function (values, value) {\n return isEmpty(value);\n },\n isEmail: function (values, value) {\n return validations.matchRegexp(values, value, /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i);\n },\n isUrl: function (values, value) {\n return validations.matchRegexp(values, value, /^(https?|s?ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i);\n },\n isTrue: function (values, value) {\n return value === true;\n },\n isFalse: function (values, value) {\n return value === false;\n },\n isNumeric: function (values, value) {\n if (typeof value === 'number') {\n return true;\n }\n return validations.matchRegexp(values, value, /^[-+]?(?:\\d*[.])?\\d+$/);\n },\n isAlpha: function (values, value) {\n return validations.matchRegexp(values, value, /^[A-Z]+$/i);\n },\n isAlphanumeric: function (values, value) {\n return validations.matchRegexp(values, value, /^[0-9A-Z]+$/i);\n },\n isInt: function (values, value) {\n return validations.matchRegexp(values, value, /^(?:[-+]?(?:0|[1-9]\\d*))$/);\n },\n isFloat: function (values, value) {\n return validations.matchRegexp(values, value, /^(?:[-+]?(?:\\d+))?(?:\\.\\d*)?(?:[eE][\\+\\-]?(?:\\d+))?$/);\n },\n isWords: function (values, value) {\n return validations.matchRegexp(values, value, /^[A-Z\\s]+$/i);\n },\n isSpecialWords: function (values, value) {\n return validations.matchRegexp(values, value, /^[A-Z\\s\\u00C0-\\u017F]+$/i);\n },\n isLength: function (values, value, length) {\n return !isExisty(value) || isEmpty(value) || value.length === length;\n },\n equals: function (values, value, eql) {\n return !isExisty(value) || isEmpty(value) || value == eql;\n },\n equalsField: function (values, value, field) {\n return value == values[field];\n },\n maxLength: function (values, value, length) {\n return !isExisty(value) || value.length <= length;\n },\n minLength: function (values, value, length) {\n return !isExisty(value) || isEmpty(value) || value.length >= length;\n }\n};\n\nmodule.exports = validations;\n\n\n\n// WEBPACK FOOTER //\n// ./src/validationRules.js","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar _invariant = require('fbjs/lib/invariant');\n\nif (process.env.NODE_ENV !== 'production') {\n var warning = require('fbjs/lib/warning');\n}\n\nvar MIXINS_KEY = 'mixins';\n\n// Helper function to allow the creation of anonymous functions which do not\n// have .name set to the name of the variable being assigned to.\nfunction identity(fn) {\n return fn;\n}\n\nvar ReactPropTypeLocationNames;\nif (process.env.NODE_ENV !== 'production') {\n ReactPropTypeLocationNames = {\n prop: 'prop',\n context: 'context',\n childContext: 'child context'\n };\n} else {\n ReactPropTypeLocationNames = {};\n}\n\nfunction factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) {\n /**\n * Policies that describe methods in `ReactClassInterface`.\n */\n\n var injectedMixins = [];\n\n /**\n * Composite components are higher-level components that compose other composite\n * or host components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return
Hello World
;\n * }\n * });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\n var ReactClassInterface = {\n /**\n * An array of Mixin objects to include when defining your component.\n *\n * @type {array}\n * @optional\n */\n mixins: 'DEFINE_MANY',\n\n /**\n * An object containing properties and methods that should be defined on\n * the component's constructor instead of its prototype (static methods).\n *\n * @type {object}\n * @optional\n */\n statics: 'DEFINE_MANY',\n\n /**\n * Definition of prop types for this component.\n *\n * @type {object}\n * @optional\n */\n propTypes: 'DEFINE_MANY',\n\n /**\n * Definition of context types for this component.\n *\n * @type {object}\n * @optional\n */\n contextTypes: 'DEFINE_MANY',\n\n /**\n * Definition of context types this component sets for its children.\n *\n * @type {object}\n * @optional\n */\n childContextTypes: 'DEFINE_MANY',\n\n // ==== Definition methods ====\n\n /**\n * Invoked when the component is mounted. Values in the mapping will be set on\n * `this.props` if that prop is not specified (i.e. using an `in` check).\n *\n * This method is invoked before `getInitialState` and therefore cannot rely\n * on `this.state` or use `this.setState`.\n *\n * @return {object}\n * @optional\n */\n getDefaultProps: 'DEFINE_MANY_MERGED',\n\n /**\n * Invoked once before the component is mounted. The return value will be used\n * as the initial value of `this.state`.\n *\n * getInitialState: function() {\n * return {\n * isOn: false,\n * fooBaz: new BazFoo()\n * }\n * }\n *\n * @return {object}\n * @optional\n */\n getInitialState: 'DEFINE_MANY_MERGED',\n\n /**\n * @return {object}\n * @optional\n */\n getChildContext: 'DEFINE_MANY_MERGED',\n\n /**\n * Uses props from `this.props` and state from `this.state` to render the\n * structure of the component.\n *\n * No guarantees are made about when or how often this method is invoked, so\n * it must not have side effects.\n *\n * render: function() {\n * var name = this.props.name;\n * return
Hello, {name}!
;\n * }\n *\n * @return {ReactComponent}\n * @required\n */\n render: 'DEFINE_ONCE',\n\n // ==== Delegate methods ====\n\n /**\n * Invoked when the component is initially created and about to be mounted.\n * This may have side effects, but any external subscriptions or data created\n * by this method must be cleaned up in `componentWillUnmount`.\n *\n * @optional\n */\n componentWillMount: 'DEFINE_MANY',\n\n /**\n * Invoked when the component has been mounted and has a DOM representation.\n * However, there is no guarantee that the DOM node is in the document.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been mounted (initialized and rendered) for the first time.\n *\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidMount: 'DEFINE_MANY',\n\n /**\n * Invoked before the component receives new props.\n *\n * Use this as an opportunity to react to a prop transition by updating the\n * state using `this.setState`. Current props are accessed via `this.props`.\n *\n * componentWillReceiveProps: function(nextProps, nextContext) {\n * this.setState({\n * likesIncreasing: nextProps.likeCount > this.props.likeCount\n * });\n * }\n *\n * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n * transition may cause a state change, but the opposite is not true. If you\n * need it, you are probably looking for `componentWillUpdate`.\n *\n * @param {object} nextProps\n * @optional\n */\n componentWillReceiveProps: 'DEFINE_MANY',\n\n /**\n * Invoked while deciding if the component should be updated as a result of\n * receiving new props, state and/or context.\n *\n * Use this as an opportunity to `return false` when you're certain that the\n * transition to the new props/state/context will not require a component\n * update.\n *\n * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n * return !equal(nextProps, this.props) ||\n * !equal(nextState, this.state) ||\n * !equal(nextContext, this.context);\n * }\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @return {boolean} True if the component should update.\n * @optional\n */\n shouldComponentUpdate: 'DEFINE_ONCE',\n\n /**\n * Invoked when the component is about to update due to a transition from\n * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n * and `nextContext`.\n *\n * Use this as an opportunity to perform preparation before an update occurs.\n *\n * NOTE: You **cannot** use `this.setState()` in this method.\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @param {ReactReconcileTransaction} transaction\n * @optional\n */\n componentWillUpdate: 'DEFINE_MANY',\n\n /**\n * Invoked when the component's DOM representation has been updated.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been updated.\n *\n * @param {object} prevProps\n * @param {?object} prevState\n * @param {?object} prevContext\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidUpdate: 'DEFINE_MANY',\n\n /**\n * Invoked when the component is about to be removed from its parent and have\n * its DOM representation destroyed.\n *\n * Use this as an opportunity to deallocate any external resources.\n *\n * NOTE: There is no `componentDidUnmount` since your component will have been\n * destroyed by that point.\n *\n * @optional\n */\n componentWillUnmount: 'DEFINE_MANY',\n\n // ==== Advanced methods ====\n\n /**\n * Updates the component's currently mounted DOM representation.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n * @overridable\n */\n updateComponent: 'OVERRIDE_BASE'\n };\n\n /**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\n var RESERVED_SPEC_KEYS = {\n displayName: function(Constructor, displayName) {\n Constructor.displayName = displayName;\n },\n mixins: function(Constructor, mixins) {\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n mixSpecIntoComponent(Constructor, mixins[i]);\n }\n }\n },\n childContextTypes: function(Constructor, childContextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, childContextTypes, 'childContext');\n }\n Constructor.childContextTypes = _assign(\n {},\n Constructor.childContextTypes,\n childContextTypes\n );\n },\n contextTypes: function(Constructor, contextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, contextTypes, 'context');\n }\n Constructor.contextTypes = _assign(\n {},\n Constructor.contextTypes,\n contextTypes\n );\n },\n /**\n * Special case getDefaultProps which should move into statics but requires\n * automatic merging.\n */\n getDefaultProps: function(Constructor, getDefaultProps) {\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps = createMergedResultFunction(\n Constructor.getDefaultProps,\n getDefaultProps\n );\n } else {\n Constructor.getDefaultProps = getDefaultProps;\n }\n },\n propTypes: function(Constructor, propTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, propTypes, 'prop');\n }\n Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n },\n statics: function(Constructor, statics) {\n mixStaticSpecIntoComponent(Constructor, statics);\n },\n autobind: function() {}\n };\n\n function validateTypeDef(Constructor, typeDef, location) {\n for (var propName in typeDef) {\n if (typeDef.hasOwnProperty(propName)) {\n // use a warning instead of an _invariant so components\n // don't show up in prod but only in __DEV__\n if (process.env.NODE_ENV !== 'production') {\n warning(\n typeof typeDef[propName] === 'function',\n '%s: %s type `%s` is invalid; it must be a function, usually from ' +\n 'React.PropTypes.',\n Constructor.displayName || 'ReactClass',\n ReactPropTypeLocationNames[location],\n propName\n );\n }\n }\n }\n }\n\n function validateMethodOverride(isAlreadyDefined, name) {\n var specPolicy = ReactClassInterface.hasOwnProperty(name)\n ? ReactClassInterface[name]\n : null;\n\n // Disallow overriding of base class methods unless explicitly allowed.\n if (ReactClassMixin.hasOwnProperty(name)) {\n _invariant(\n specPolicy === 'OVERRIDE_BASE',\n 'ReactClassInterface: You are attempting to override ' +\n '`%s` from your class specification. Ensure that your method names ' +\n 'do not overlap with React methods.',\n name\n );\n }\n\n // Disallow defining methods more than once unless explicitly allowed.\n if (isAlreadyDefined) {\n _invariant(\n specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED',\n 'ReactClassInterface: You are attempting to define ' +\n '`%s` on your component more than once. This conflict may be due ' +\n 'to a mixin.',\n name\n );\n }\n }\n\n /**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classes.\n */\n function mixSpecIntoComponent(Constructor, spec) {\n if (!spec) {\n if (process.env.NODE_ENV !== 'production') {\n var typeofSpec = typeof spec;\n var isMixinValid = typeofSpec === 'object' && spec !== null;\n\n if (process.env.NODE_ENV !== 'production') {\n warning(\n isMixinValid,\n \"%s: You're attempting to include a mixin that is either null \" +\n 'or not an object. Check the mixins included by the component, ' +\n 'as well as any mixins they include themselves. ' +\n 'Expected object but got %s.',\n Constructor.displayName || 'ReactClass',\n spec === null ? null : typeofSpec\n );\n }\n }\n\n return;\n }\n\n _invariant(\n typeof spec !== 'function',\n \"ReactClass: You're attempting to \" +\n 'use a component class or function as a mixin. Instead, just use a ' +\n 'regular object.'\n );\n _invariant(\n !isValidElement(spec),\n \"ReactClass: You're attempting to \" +\n 'use a component as a mixin. Instead, just use a regular object.'\n );\n\n var proto = Constructor.prototype;\n var autoBindPairs = proto.__reactAutoBindPairs;\n\n // By handling mixins before any other properties, we ensure the same\n // chaining order is applied to methods with DEFINE_MANY policy, whether\n // mixins are listed before or after these methods in the spec.\n if (spec.hasOwnProperty(MIXINS_KEY)) {\n RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n }\n\n for (var name in spec) {\n if (!spec.hasOwnProperty(name)) {\n continue;\n }\n\n if (name === MIXINS_KEY) {\n // We have already handled mixins in a special case above.\n continue;\n }\n\n var property = spec[name];\n var isAlreadyDefined = proto.hasOwnProperty(name);\n validateMethodOverride(isAlreadyDefined, name);\n\n if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n RESERVED_SPEC_KEYS[name](Constructor, property);\n } else {\n // Setup methods on prototype:\n // The following member methods should not be automatically bound:\n // 1. Expected ReactClass methods (in the \"interface\").\n // 2. Overridden methods (that were mixed in).\n var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n var isFunction = typeof property === 'function';\n var shouldAutoBind =\n isFunction &&\n !isReactClassMethod &&\n !isAlreadyDefined &&\n spec.autobind !== false;\n\n if (shouldAutoBind) {\n autoBindPairs.push(name, property);\n proto[name] = property;\n } else {\n if (isAlreadyDefined) {\n var specPolicy = ReactClassInterface[name];\n\n // These cases should already be caught by validateMethodOverride.\n _invariant(\n isReactClassMethod &&\n (specPolicy === 'DEFINE_MANY_MERGED' ||\n specPolicy === 'DEFINE_MANY'),\n 'ReactClass: Unexpected spec policy %s for key %s ' +\n 'when mixing in component specs.',\n specPolicy,\n name\n );\n\n // For methods which are defined more than once, call the existing\n // methods before calling the new property, merging if appropriate.\n if (specPolicy === 'DEFINE_MANY_MERGED') {\n proto[name] = createMergedResultFunction(proto[name], property);\n } else if (specPolicy === 'DEFINE_MANY') {\n proto[name] = createChainedFunction(proto[name], property);\n }\n } else {\n proto[name] = property;\n if (process.env.NODE_ENV !== 'production') {\n // Add verbose displayName to the function, which helps when looking\n // at profiling tools.\n if (typeof property === 'function' && spec.displayName) {\n proto[name].displayName = spec.displayName + '_' + name;\n }\n }\n }\n }\n }\n }\n }\n\n function mixStaticSpecIntoComponent(Constructor, statics) {\n if (!statics) {\n return;\n }\n for (var name in statics) {\n var property = statics[name];\n if (!statics.hasOwnProperty(name)) {\n continue;\n }\n\n var isReserved = name in RESERVED_SPEC_KEYS;\n _invariant(\n !isReserved,\n 'ReactClass: You are attempting to define a reserved ' +\n 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' +\n 'as an instance property instead; it will still be accessible on the ' +\n 'constructor.',\n name\n );\n\n var isInherited = name in Constructor;\n _invariant(\n !isInherited,\n 'ReactClass: You are attempting to define ' +\n '`%s` on your component more than once. This conflict may be ' +\n 'due to a mixin.',\n name\n );\n Constructor[name] = property;\n }\n }\n\n /**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\n function mergeIntoWithNoDuplicateKeys(one, two) {\n _invariant(\n one && two && typeof one === 'object' && typeof two === 'object',\n 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'\n );\n\n for (var key in two) {\n if (two.hasOwnProperty(key)) {\n _invariant(\n one[key] === undefined,\n 'mergeIntoWithNoDuplicateKeys(): ' +\n 'Tried to merge two objects with the same key: `%s`. This conflict ' +\n 'may be due to a mixin; in particular, this may be caused by two ' +\n 'getInitialState() or getDefaultProps() methods returning objects ' +\n 'with clashing keys.',\n key\n );\n one[key] = two[key];\n }\n }\n return one;\n }\n\n /**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\n function createMergedResultFunction(one, two) {\n return function mergedResult() {\n var a = one.apply(this, arguments);\n var b = two.apply(this, arguments);\n if (a == null) {\n return b;\n } else if (b == null) {\n return a;\n }\n var c = {};\n mergeIntoWithNoDuplicateKeys(c, a);\n mergeIntoWithNoDuplicateKeys(c, b);\n return c;\n };\n }\n\n /**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\n function createChainedFunction(one, two) {\n return function chainedFunction() {\n one.apply(this, arguments);\n two.apply(this, arguments);\n };\n }\n\n /**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\n function bindAutoBindMethod(component, method) {\n var boundMethod = method.bind(component);\n if (process.env.NODE_ENV !== 'production') {\n boundMethod.__reactBoundContext = component;\n boundMethod.__reactBoundMethod = method;\n boundMethod.__reactBoundArguments = null;\n var componentName = component.constructor.displayName;\n var _bind = boundMethod.bind;\n boundMethod.bind = function(newThis) {\n for (\n var _len = arguments.length,\n args = Array(_len > 1 ? _len - 1 : 0),\n _key = 1;\n _key < _len;\n _key++\n ) {\n args[_key - 1] = arguments[_key];\n }\n\n // User is trying to bind() an autobound method; we effectively will\n // ignore the value of \"this\" that the user is trying to use, so\n // let's warn.\n if (newThis !== component && newThis !== null) {\n if (process.env.NODE_ENV !== 'production') {\n warning(\n false,\n 'bind(): React component methods may only be bound to the ' +\n 'component instance. See %s',\n componentName\n );\n }\n } else if (!args.length) {\n if (process.env.NODE_ENV !== 'production') {\n warning(\n false,\n 'bind(): You are binding a component method to the component. ' +\n 'React does this for you automatically in a high-performance ' +\n 'way, so you can safely remove this call. See %s',\n componentName\n );\n }\n return boundMethod;\n }\n var reboundMethod = _bind.apply(boundMethod, arguments);\n reboundMethod.__reactBoundContext = component;\n reboundMethod.__reactBoundMethod = method;\n reboundMethod.__reactBoundArguments = args;\n return reboundMethod;\n };\n }\n return boundMethod;\n }\n\n /**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\n function bindAutoBindMethods(component) {\n var pairs = component.__reactAutoBindPairs;\n for (var i = 0; i < pairs.length; i += 2) {\n var autoBindKey = pairs[i];\n var method = pairs[i + 1];\n component[autoBindKey] = bindAutoBindMethod(component, method);\n }\n }\n\n var IsMountedPreMixin = {\n componentDidMount: function() {\n this.__isMounted = true;\n }\n };\n\n var IsMountedPostMixin = {\n componentWillUnmount: function() {\n this.__isMounted = false;\n }\n };\n\n /**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\n var ReactClassMixin = {\n /**\n * TODO: This will be deprecated because state should always keep a consistent\n * type signature and the only use case for this, is to avoid that.\n */\n replaceState: function(newState, callback) {\n this.updater.enqueueReplaceState(this, newState, callback);\n },\n\n /**\n * Checks whether or not this composite component is mounted.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function() {\n if (process.env.NODE_ENV !== 'production') {\n warning(\n this.__didWarnIsMounted,\n '%s: isMounted is deprecated. Instead, make sure to clean up ' +\n 'subscriptions and pending requests in componentWillUnmount to ' +\n 'prevent memory leaks.',\n (this.constructor && this.constructor.displayName) ||\n this.name ||\n 'Component'\n );\n this.__didWarnIsMounted = true;\n }\n return !!this.__isMounted;\n }\n };\n\n var ReactClassComponent = function() {};\n _assign(\n ReactClassComponent.prototype,\n ReactComponent.prototype,\n ReactClassMixin\n );\n\n /**\n * Creates a composite component class given a class specification.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n *\n * @param {object} spec Class specification (which must define `render`).\n * @return {function} Component constructor function.\n * @public\n */\n function createClass(spec) {\n // To keep our warnings more understandable, we'll use a little hack here to\n // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\n // unnecessarily identify a class without displayName as 'Constructor'.\n var Constructor = identity(function(props, context, updater) {\n // This constructor gets overridden by mocks. The argument is used\n // by mocks to assert on what gets mounted.\n\n if (process.env.NODE_ENV !== 'production') {\n warning(\n this instanceof Constructor,\n 'Something is calling a React component directly. Use a factory or ' +\n 'JSX instead. See: https://fb.me/react-legacyfactory'\n );\n }\n\n // Wire up auto-binding\n if (this.__reactAutoBindPairs.length) {\n bindAutoBindMethods(this);\n }\n\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n\n this.state = null;\n\n // ReactClasses doesn't have constructors. Instead, they use the\n // getInitialState and componentWillMount methods for initialization.\n\n var initialState = this.getInitialState ? this.getInitialState() : null;\n if (process.env.NODE_ENV !== 'production') {\n // We allow auto-mocks to proceed as if they're returning null.\n if (\n initialState === undefined &&\n this.getInitialState._isMockFunction\n ) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n initialState = null;\n }\n }\n _invariant(\n typeof initialState === 'object' && !Array.isArray(initialState),\n '%s.getInitialState(): must return an object or null',\n Constructor.displayName || 'ReactCompositeComponent'\n );\n\n this.state = initialState;\n });\n Constructor.prototype = new ReactClassComponent();\n Constructor.prototype.constructor = Constructor;\n Constructor.prototype.__reactAutoBindPairs = [];\n\n injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n mixSpecIntoComponent(Constructor, IsMountedPreMixin);\n mixSpecIntoComponent(Constructor, spec);\n mixSpecIntoComponent(Constructor, IsMountedPostMixin);\n\n // Initialize the defaultProps property after all mixins have been merged.\n if (Constructor.getDefaultProps) {\n Constructor.defaultProps = Constructor.getDefaultProps();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // This is a tag to indicate that the use of these method names is ok,\n // since it's used with createClass. If it's not, then it's likely a\n // mistake so we'll warn you to use the static property, property\n // initializer or constructor respectively.\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps.isReactClassApproved = {};\n }\n if (Constructor.prototype.getInitialState) {\n Constructor.prototype.getInitialState.isReactClassApproved = {};\n }\n }\n\n _invariant(\n Constructor.prototype.render,\n 'createClass(...): Class specification must implement a `render` method.'\n );\n\n if (process.env.NODE_ENV !== 'production') {\n warning(\n !Constructor.prototype.componentShouldUpdate,\n '%s has a method called ' +\n 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +\n 'The name is phrased as a question because the function is ' +\n 'expected to return a value.',\n spec.displayName || 'A component'\n );\n warning(\n !Constructor.prototype.componentWillRecieveProps,\n '%s has a method called ' +\n 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',\n spec.displayName || 'A component'\n );\n }\n\n // Reduce time spent doing lookups by setting these on the prototype.\n for (var methodName in ReactClassInterface) {\n if (!Constructor.prototype[methodName]) {\n Constructor.prototype[methodName] = null;\n }\n }\n\n return Constructor;\n }\n\n return createClass;\n}\n\nmodule.exports = factory;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/create-react-class/factory.js\n// module id = 14\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/fbjs/lib/emptyObject.js\n// module id = 15\n// module chunks = 0","function toObj(source) {\n return Object.keys(source).reduce(function (output, key) {\n var parentKey = key.match(/[^\\[]*/i);\n var paths = key.match(/\\[.*?\\]/g) || [];\n paths = [parentKey[0]].concat(paths).map(function (key) {\n return key.replace(/\\[|\\]/g, '');\n });\n var currentPath = output;\n while (paths.length) {\n var pathKey = paths.shift();\n\n if (pathKey in currentPath) {\n currentPath = currentPath[pathKey];\n } else {\n currentPath[pathKey] = paths.length ? isNaN(paths[0]) ? {} : [] : source[key];\n currentPath = currentPath[pathKey];\n }\n }\n\n return output;\n }, {});\n}\n\nfunction fromObj(obj) {\n function recur(newObj, propName, currVal) {\n if (Array.isArray(currVal) || Object.prototype.toString.call(currVal) === '[object Object]') {\n Object.keys(currVal).forEach(function(v) {\n recur(newObj, propName + \"[\" + v + \"]\", currVal[v]);\n });\n return newObj;\n }\n\n newObj[propName] = currVal;\n return newObj;\n }\n\n var keys = Object.keys(obj);\n return keys.reduce(function(newObj, propName) {\n return recur(newObj, propName, obj[propName]);\n }, {});\n}\n\nmodule.exports = {\n fromObj: fromObj,\n toObj: toObj\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/form-data-to-object/index.js\n// module id = 16\n// module chunks = 0","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/object-assign/index.js\n// module id = 17\n// module chunks = 0","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== 'production') {\n var invariant = require('fbjs/lib/invariant');\n var warning = require('fbjs/lib/warning');\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (typeSpecs.hasOwnProperty(typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n invariant(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', location, typeSpecName);\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error);\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n warning(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : '');\n }\n }\n }\n }\n}\n\nmodule.exports = checkPropTypes;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/prop-types/checkPropTypes.js\n// module id = 18\n// module chunks = 0","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar invariant = require('fbjs/lib/invariant');\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n invariant(\n false,\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/prop-types/factoryWithThrowingShims.js\n// module id = 19\n// module chunks = 0","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar checkPropTypes = require('./checkPropTypes');\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message) {\n this.message = message;\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n invariant(\n false,\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n warning(\n false,\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `%s` prop on `%s`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.',\n propFullName,\n componentName\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunction.thatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;\n return emptyFunction.thatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (propValue.hasOwnProperty(key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunction.thatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n warning(\n false,\n 'Invalid argument supplid to oneOfType. Expected an array of check functions, but ' +\n 'received %s at index %s.',\n getPostfixForTypeWarning(checker),\n i\n );\n return emptyFunction.thatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n return null;\n }\n }\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (!checker) {\n continue;\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/prop-types/factoryWithTypeCheckers.js\n// module id = 20\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///formsy-react.js","webpack:///webpack/bootstrap 361977019373f0255897","webpack:///./node_modules/prop-types/index.js","webpack:///external \"react\"","webpack:///./src/utils.js","webpack:///./src/index.js","webpack:///./node_modules/form-data-to-object/index.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/fbjs/lib/emptyFunction.js","webpack:///./node_modules/fbjs/lib/invariant.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./src/validationRules.js","webpack:///./src/Wrapper.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","value","_typeof","Symbol","iterator","obj","constructor","default","arraysDiffer","a","b","_this","isDifferent","length","forEach","item","index","isSame","objectsDiffer","_this2","keys","key","Array","isArray","toString","find","collection","fn","runRules","currentValues","validations","validationRules","results","errors","failed","success","validationMethod","Error","validation","push","_interopRequireDefault","_objectWithoutProperties","target","indexOf","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","writable","setPrototypeOf","__proto__","withFormsy","propTypes","addValidationRule","undefined","_extends","assign","arguments","source","_createClass","defineProperties","props","descriptor","protoProps","staticProps","_formDataToObject","_formDataToObject2","_propTypes","_propTypes2","_react","_react2","_utils","_utils2","_validationRules","_validationRules2","_Wrapper","_Wrapper2","Formsy","_React$Component","getPrototypeOf","state","isValid","isSubmitting","canChange","inputs","attachToForm","bind","detachFromForm","getCurrentValues","getPristineValues","isChanged","isFormDisabled","reset","runValidation","submit","updateInputsWithError","validate","validateForm","formsy","isValidValue","component","prevInputNames","map","validationErrors","setInputValidationErrors","newInputNames","componentPos","slice","concat","reduce","data","dataCopy","mapModel","disabled","model","mapping","toObj","mappedModel","keyArray","split","base","currentKey","shift","setFormPristine","resetModel","setValue","resetValue","_this3","validationError","validationResults","requiredResults","requiredValidations","isRequired","error","filter","x","pos","arr","args","setState","apply","isPristine","formSubmitted","event","preventDefault","getModel","onSubmit","onValidSubmit","onInvalidSubmit","_this4","input","JSON","stringify","preventExternalInvalidation","externalError","onChange","_this5","onValidationComplete","allIsValid","every","onValid","onInvalid","_props","nonFormsyProps","getErrorMessage","getErrorMessages","getValue","hasValue","isFormSubmitted","setValidations","showError","showRequired","createElement","children","Component","displayName","defaultProps","onError","node","bool","func","childContextTypes","output","parentKey","match","paths","replace","currentPath","pathKey","isNaN","fromObj","recur","newObj","propName","currVal","v","emptyFunction","invariant","ReactPropTypesSecret","shim","componentName","location","propFullName","secret","getShim","ReactPropTypes","array","number","string","symbol","any","arrayOf","element","instanceOf","objectOf","oneOf","oneOfType","shape","checkPropTypes","PropTypes","makeEmptyFunction","arg","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsNull","thatReturnsThis","thatReturnsArgument","condition","format","e","f","validateFormat","argIndex","framesToPop","isExisty","isEmpty","isDefaultRequiredValue","values","matchRegexp","regexp","test","isUndefined","isEmptyString","isEmail","isUrl","isTrue","isFalse","isNumeric","isAlpha","isAlphanumeric","isInt","isFloat","isWords","isSpecialWords","isLength","equals","eql","equalsField","field","maxLength","minLength","convertValidationsToObject","validationsAccumulator","validateMethod","parse","validationsAccumulatorCopy","innerRef","required","WrappedComponent","pristineValue","context","nextProps","prevProps","messages","propsForElement","ref","contextTypes","defaultValue"],"mappings":"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","file":"formsy-react.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Formsy\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"Formsy\"] = factory(root[\"react\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Formsy\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"Formsy\"] = factory(root[\"react\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\nif (false) {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = __webpack_require__(5)();\n}\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = {\n arraysDiffer: function arraysDiffer(a, b) {\n var _this = this;\n\n var isDifferent = false;\n if (a.length !== b.length) {\n isDifferent = true;\n } else {\n a.forEach(function (item, index) {\n if (!_this.isSame(item, b[index])) {\n isDifferent = true;\n }\n }, this);\n }\n return isDifferent;\n },\n objectsDiffer: function objectsDiffer(a, b) {\n var _this2 = this;\n\n var isDifferent = false;\n if (Object.keys(a).length !== Object.keys(b).length) {\n isDifferent = true;\n } else {\n Object.keys(a).forEach(function (key) {\n if (!_this2.isSame(a[key], b[key])) {\n isDifferent = true;\n }\n }, this);\n }\n return isDifferent;\n },\n isSame: function isSame(a, b) {\n if ((typeof a === 'undefined' ? 'undefined' : _typeof(a)) !== (typeof b === 'undefined' ? 'undefined' : _typeof(b))) {\n return false;\n } else if (Array.isArray(a) && Array.isArray(b)) {\n return !this.arraysDiffer(a, b);\n } else if (typeof a === 'function') {\n return a.toString() === b.toString();\n } else if ((typeof a === 'undefined' ? 'undefined' : _typeof(a)) === 'object' && a !== null && b !== null) {\n return !this.objectsDiffer(a, b);\n }\n\n return a === b;\n },\n find: function find(collection, fn) {\n for (var i = 0, l = collection.length; i < l; i += 1) {\n var item = collection[i];\n if (fn(item)) {\n return item;\n }\n }\n return null;\n },\n runRules: function runRules(value, currentValues, validations, validationRules) {\n var results = {\n errors: [],\n failed: [],\n success: []\n };\n\n if (Object.keys(validations).length) {\n Object.keys(validations).forEach(function (validationMethod) {\n if (validationRules[validationMethod] && typeof validations[validationMethod] === 'function') {\n throw new Error('Formsy does not allow you to override default validations: ' + validationMethod);\n }\n\n if (!validationRules[validationMethod] && typeof validations[validationMethod] !== 'function') {\n throw new Error('Formsy does not have the validation rule: ' + validationMethod);\n }\n\n if (typeof validations[validationMethod] === 'function') {\n var validation = validations[validationMethod](currentValues, value);\n if (typeof validation === 'string') {\n results.errors.push(validation);\n results.failed.push(validationMethod);\n } else if (!validation) {\n results.failed.push(validationMethod);\n }\n return;\n } else if (typeof validations[validationMethod] !== 'function') {\n var _validation = validationRules[validationMethod](currentValues, value, validations[validationMethod]);\n if (typeof _validation === 'string') {\n results.errors.push(_validation);\n results.failed.push(validationMethod);\n } else if (!_validation) {\n results.failed.push(validationMethod);\n } else {\n results.success.push(validationMethod);\n }\n return;\n }\n\n results.success.push(validationMethod);\n });\n }\n\n return results;\n }\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.withFormsy = exports.propTypes = exports.addValidationRule = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _formDataToObject = __webpack_require__(4);\n\nvar _formDataToObject2 = _interopRequireDefault(_formDataToObject);\n\nvar _propTypes = __webpack_require__(0);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(2);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _validationRules = __webpack_require__(9);\n\nvar _validationRules2 = _interopRequireDefault(_validationRules);\n\nvar _Wrapper = __webpack_require__(10);\n\nvar _Wrapper2 = _interopRequireDefault(_Wrapper);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Formsy = function (_React$Component) {\n _inherits(Formsy, _React$Component);\n\n function Formsy(props) {\n _classCallCheck(this, Formsy);\n\n var _this = _possibleConstructorReturn(this, (Formsy.__proto__ || Object.getPrototypeOf(Formsy)).call(this, props));\n\n _this.state = {\n isValid: true,\n isSubmitting: false,\n canChange: false\n };\n _this.inputs = [];\n _this.attachToForm = _this.attachToForm.bind(_this);\n _this.detachFromForm = _this.detachFromForm.bind(_this);\n _this.getCurrentValues = _this.getCurrentValues.bind(_this);\n _this.getPristineValues = _this.getPristineValues.bind(_this);\n _this.isChanged = _this.isChanged.bind(_this);\n _this.isFormDisabled = _this.isFormDisabled.bind(_this);\n _this.reset = _this.reset.bind(_this);\n _this.runValidation = _this.runValidation.bind(_this);\n _this.submit = _this.submit.bind(_this);\n _this.updateInputsWithError = _this.updateInputsWithError.bind(_this);\n _this.validate = _this.validate.bind(_this);\n _this.validateForm = _this.validateForm.bind(_this);\n return _this;\n }\n\n _createClass(Formsy, [{\n key: 'getChildContext',\n value: function getChildContext() {\n var _this2 = this;\n\n return {\n formsy: {\n attachToForm: this.attachToForm,\n detachFromForm: this.detachFromForm,\n validate: this.validate,\n isFormDisabled: this.isFormDisabled,\n isValidValue: function isValidValue(component, value) {\n return _this2.runValidation(component, value).isValid;\n }\n }\n };\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.validateForm();\n }\n }, {\n key: 'componentWillUpdate',\n value: function componentWillUpdate() {\n // Keep a reference to input names before form updates,\n // to check if inputs has changed after render\n this.prevInputNames = this.inputs.map(function (component) {\n return component.props.name;\n });\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n if (this.props.validationErrors && _typeof(this.props.validationErrors) === 'object' && Object.keys(this.props.validationErrors).length > 0) {\n this.setInputValidationErrors(this.props.validationErrors);\n }\n\n var newInputNames = this.inputs.map(function (component) {\n return component.props.name;\n });\n if (_utils2.default.arraysDiffer(this.prevInputNames, newInputNames)) {\n this.validateForm();\n }\n }\n\n // Method put on each input component to register\n // itself to the form\n\n }, {\n key: 'attachToForm',\n value: function attachToForm(component) {\n if (this.inputs.indexOf(component) === -1) {\n this.inputs.push(component);\n }\n\n this.validate(component);\n }\n\n // Method put on each input component to unregister\n // itself from the form\n\n }, {\n key: 'detachFromForm',\n value: function detachFromForm(component) {\n var componentPos = this.inputs.indexOf(component);\n\n if (componentPos !== -1) {\n this.inputs = this.inputs.slice(0, componentPos).concat(this.inputs.slice(componentPos + 1));\n }\n\n this.validateForm();\n }\n }, {\n key: 'getCurrentValues',\n value: function getCurrentValues() {\n return this.inputs.reduce(function (data, component) {\n var name = component.props.name;\n var dataCopy = Object.assign({}, data); // avoid param reassignment\n dataCopy[name] = component.state.value;\n return dataCopy;\n }, {});\n }\n }, {\n key: 'getModel',\n value: function getModel() {\n var currentValues = this.getCurrentValues();\n return this.mapModel(currentValues);\n }\n }, {\n key: 'getPristineValues',\n value: function getPristineValues() {\n return this.inputs.reduce(function (data, component) {\n var name = component.props.name;\n var dataCopy = Object.assign({}, data); // avoid param reassignment\n dataCopy[name] = component.props.value;\n return dataCopy;\n }, {});\n }\n\n // Checks if the values have changed from their initial value\n\n }, {\n key: 'isChanged',\n value: function isChanged() {\n return !_utils2.default.isSame(this.getPristineValues(), this.getCurrentValues());\n }\n }, {\n key: 'isFormDisabled',\n value: function isFormDisabled() {\n return this.props.disabled;\n }\n }, {\n key: 'mapModel',\n value: function mapModel(model) {\n if (this.props.mapping) {\n return this.props.mapping(model);\n }\n\n return _formDataToObject2.default.toObj(Object.keys(model).reduce(function (mappedModel, key) {\n var keyArray = key.split('.');\n var base = mappedModel;\n while (keyArray.length) {\n var currentKey = keyArray.shift();\n base[currentKey] = keyArray.length ? base[currentKey] || {} : model[key];\n base = base[currentKey];\n }\n return mappedModel;\n }, {}));\n }\n }, {\n key: 'reset',\n value: function reset(data) {\n this.setFormPristine(true);\n this.resetModel(data);\n }\n\n // Reset each key in the model to the original / initial / specified value\n\n }, {\n key: 'resetModel',\n value: function resetModel(data) {\n this.inputs.forEach(function (component) {\n var name = component.props.name;\n if (data && Object.prototype.hasOwnProperty.call(data, name)) {\n component.setValue(data[name]);\n } else {\n component.resetValue();\n }\n });\n this.validateForm();\n }\n\n // Checks validation on current value or a passed value\n\n }, {\n key: 'runValidation',\n value: function runValidation(component) {\n var _this3 = this;\n\n var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : component.state.value;\n\n var currentValues = this.getCurrentValues();\n var validationErrors = component.props.validationErrors;\n var validationError = component.props.validationError;\n\n var validationResults = _utils2.default.runRules(value, currentValues, component.validations, _validationRules2.default);\n var requiredResults = _utils2.default.runRules(value, currentValues, component.requiredValidations, _validationRules2.default);\n\n var isRequired = Object.keys(component.requiredValidations).length ? !!requiredResults.success.length : false;\n var isValid = !validationResults.failed.length && !(this.props.validationErrors && this.props.validationErrors[component.props.name]);\n\n return {\n isRequired: isRequired,\n isValid: isRequired ? false : isValid,\n error: function () {\n if (isValid && !isRequired) {\n return [];\n }\n\n if (validationResults.errors.length) {\n return validationResults.errors;\n }\n\n if (_this3.props.validationErrors && _this3.props.validationErrors[component.props.name]) {\n return typeof _this3.props.validationErrors[component.props.name] === 'string' ? [_this3.props.validationErrors[component.props.name]] : _this3.props.validationErrors[component.props.name];\n }\n\n if (isRequired) {\n var error = validationErrors[requiredResults.success[0]];\n return error ? [error] : null;\n }\n\n if (validationResults.failed.length) {\n return validationResults.failed.map(function (failed) {\n return validationErrors[failed] ? validationErrors[failed] : validationError;\n }).filter(function (x, pos, arr) {\n return arr.indexOf(x) === pos;\n }); // remove duplicates\n }\n\n return undefined;\n }()\n };\n }\n }, {\n key: 'setInputValidationErrors',\n value: function setInputValidationErrors(errors) {\n this.inputs.forEach(function (component) {\n var name = component.props.name;\n var args = [{\n isValid: !(name in errors),\n validationError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n }];\n component.setState.apply(component, args);\n });\n }\n }, {\n key: 'setFormPristine',\n value: function setFormPristine(isPristine) {\n this.setState({\n formSubmitted: !isPristine\n });\n\n // Iterate through each component and set it as pristine\n // or \"dirty\".\n this.inputs.forEach(function (component) {\n component.setState({\n formSubmitted: !isPristine,\n isPristine: isPristine\n });\n });\n }\n\n // Update model, submit to url prop and send the model\n\n }, {\n key: 'submit',\n value: function submit(event) {\n if (event && event.preventDefault) {\n event.preventDefault();\n }\n\n // Trigger form as not pristine.\n // If any inputs have not been touched yet this will make them dirty\n // so validation becomes visible (if based on isPristine)\n this.setFormPristine(false);\n var model = this.getModel();\n this.props.onSubmit(model, this.resetModel, this.updateInputsWithError);\n if (this.state.isValid) {\n this.props.onValidSubmit(model, this.resetModel, this.updateInputsWithError);\n } else {\n this.props.onInvalidSubmit(model, this.resetModel, this.updateInputsWithError);\n }\n }\n\n // Go through errors from server and grab the components\n // stored in the inputs map. Change their state to invalid\n // and set the serverError message\n\n }, {\n key: 'updateInputsWithError',\n value: function updateInputsWithError(errors) {\n var _this4 = this;\n\n Object.keys(errors).forEach(function (name) {\n var component = _utils2.default.find(_this4.inputs, function (input) {\n return input.props.name === name;\n });\n if (!component) {\n throw new Error('You are trying to update an input that does not exist. Verify errors object with input names. ' + JSON.stringify(errors));\n }\n var args = [{\n isValid: _this4.props.preventExternalInvalidation,\n externalError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n }];\n component.setState.apply(component, args);\n });\n }\n\n // Use the binded values and the actual input value to\n // validate the input and set its state. Then check the\n // state of the form itself\n\n }, {\n key: 'validate',\n value: function validate(component) {\n // Trigger onChange\n if (this.state.canChange) {\n this.props.onChange(this.getCurrentValues(), this.isChanged());\n }\n\n var validation = this.runValidation(component);\n // Run through the validations, split them up and call\n // the validator IF there is a value or it is required\n component.setState({\n isValid: validation.isValid,\n isRequired: validation.isRequired,\n validationError: validation.error,\n externalError: null\n }, this.validateForm);\n }\n\n // Validate the form by going through all child input components\n // and check their state\n\n }, {\n key: 'validateForm',\n value: function validateForm() {\n var _this5 = this;\n\n // We need a callback as we are validating all inputs again. This will\n // run when the last component has set its state\n var onValidationComplete = function onValidationComplete() {\n var allIsValid = _this5.inputs.every(function (component) {\n return component.state.isValid;\n });\n\n _this5.setState({\n isValid: allIsValid\n });\n\n if (allIsValid) {\n _this5.props.onValid();\n } else {\n _this5.props.onInvalid();\n }\n\n // Tell the form that it can start to trigger change events\n _this5.setState({\n canChange: true\n });\n };\n\n // Run validation again in case affected by other inputs. The\n // last component validated will run the onValidationComplete callback\n this.inputs.forEach(function (component, index) {\n var validation = _this5.runValidation(component);\n if (validation.isValid && component.state.externalError) {\n validation.isValid = false;\n }\n component.setState({\n isValid: validation.isValid,\n isRequired: validation.isRequired,\n validationError: validation.error,\n externalError: !validation.isValid && component.state.externalError ? component.state.externalError : null\n }, index === _this5.inputs.length - 1 ? onValidationComplete : null);\n });\n\n // If there are no inputs, set state where form is ready to trigger\n // change event. New inputs might be added later\n if (!this.inputs.length) {\n this.setState({\n canChange: true\n });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n getErrorMessage = _props.getErrorMessage,\n getErrorMessages = _props.getErrorMessages,\n getValue = _props.getValue,\n hasValue = _props.hasValue,\n isFormDisabled = _props.isFormDisabled,\n isFormSubmitted = _props.isFormSubmitted,\n isPristine = _props.isPristine,\n isRequired = _props.isRequired,\n isValid = _props.isValid,\n isValidValue = _props.isValidValue,\n mapping = _props.mapping,\n onChange = _props.onChange,\n onInvalidSubmit = _props.onInvalidSubmit,\n onInvalid = _props.onInvalid,\n onSubmit = _props.onSubmit,\n onValid = _props.onValid,\n onValidSubmit = _props.onValidSubmit,\n preventExternalInvalidation = _props.preventExternalInvalidation,\n resetValue = _props.resetValue,\n setValidations = _props.setValidations,\n setValue = _props.setValue,\n showError = _props.showError,\n showRequired = _props.showRequired,\n validationErrors = _props.validationErrors,\n nonFormsyProps = _objectWithoutProperties(_props, ['getErrorMessage', 'getErrorMessages', 'getValue', 'hasValue', 'isFormDisabled', 'isFormSubmitted', 'isPristine', 'isRequired', 'isValid', 'isValidValue', 'mapping', 'onChange', 'onInvalidSubmit', 'onInvalid', 'onSubmit', 'onValid', 'onValidSubmit', 'preventExternalInvalidation', 'resetValue', 'setValidations', 'setValue', 'showError', 'showRequired', 'validationErrors']);\n\n return _react2.default.createElement('form', _extends({\n onSubmit: this.submit\n }, nonFormsyProps), this.props.children);\n }\n }]);\n\n return Formsy;\n}(_react2.default.Component);\n\nFormsy.displayName = 'Formsy';\n\nFormsy.defaultProps = {\n children: null,\n disabled: false,\n getErrorMessage: function getErrorMessage() {},\n getErrorMessages: function getErrorMessages() {},\n getValue: function getValue() {},\n hasValue: function hasValue() {},\n isFormDisabled: function isFormDisabled() {},\n isFormSubmitted: function isFormSubmitted() {},\n isPristine: function isPristine() {},\n isRequired: function isRequired() {},\n isValid: function isValid() {},\n isValidValue: function isValidValue() {},\n mapping: null,\n onChange: function onChange() {},\n onError: function onError() {},\n onInvalid: function onInvalid() {},\n onInvalidSubmit: function onInvalidSubmit() {},\n onSubmit: function onSubmit() {},\n onValid: function onValid() {},\n onValidSubmit: function onValidSubmit() {},\n preventExternalInvalidation: false,\n resetValue: function resetValue() {},\n setValidations: function setValidations() {},\n setValue: function setValue() {},\n showError: function showError() {},\n showRequired: function showRequired() {},\n validationErrors: null\n};\n\nFormsy.propTypes = {\n children: _propTypes2.default.node,\n disabled: _propTypes2.default.bool,\n getErrorMessage: _propTypes2.default.func,\n getErrorMessages: _propTypes2.default.func,\n getValue: _propTypes2.default.func,\n hasValue: _propTypes2.default.func,\n isFormDisabled: _propTypes2.default.func,\n isFormSubmitted: _propTypes2.default.func,\n isPristine: _propTypes2.default.func,\n isRequired: _propTypes2.default.func,\n isValid: _propTypes2.default.func,\n isValidValue: _propTypes2.default.func,\n mapping: _propTypes2.default.object, // eslint-disable-line\n preventExternalInvalidation: _propTypes2.default.bool,\n onChange: _propTypes2.default.func,\n onInvalid: _propTypes2.default.func,\n onInvalidSubmit: _propTypes2.default.func,\n onSubmit: _propTypes2.default.func,\n onValid: _propTypes2.default.func,\n onValidSubmit: _propTypes2.default.func,\n resetValue: _propTypes2.default.func,\n setValidations: _propTypes2.default.func,\n setValue: _propTypes2.default.func,\n showError: _propTypes2.default.func,\n showRequired: _propTypes2.default.func,\n validationErrors: _propTypes2.default.object // eslint-disable-line\n};\n\nFormsy.childContextTypes = {\n formsy: _propTypes2.default.object\n};\n\nvar addValidationRule = function addValidationRule(name, func) {\n _validationRules2.default[name] = func;\n};\n\nvar withFormsy = _Wrapper2.default;\n\nexports.addValidationRule = addValidationRule;\nexports.propTypes = _Wrapper.propTypes;\nexports.withFormsy = withFormsy;\nexports.default = Formsy;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nfunction toObj(source) {\n return Object.keys(source).reduce(function (output, key) {\n var parentKey = key.match(/[^\\[]*/i);\n var paths = key.match(/\\[.*?\\]/g) || [];\n paths = [parentKey[0]].concat(paths).map(function (key) {\n return key.replace(/\\[|\\]/g, '');\n });\n var currentPath = output;\n while (paths.length) {\n var pathKey = paths.shift();\n\n if (pathKey in currentPath) {\n currentPath = currentPath[pathKey];\n } else {\n currentPath[pathKey] = paths.length ? isNaN(paths[0]) ? {} : [] : source[key];\n currentPath = currentPath[pathKey];\n }\n }\n\n return output;\n }, {});\n}\n\nfunction fromObj(obj) {\n function recur(newObj, propName, currVal) {\n if (Array.isArray(currVal) || Object.prototype.toString.call(currVal) === '[object Object]') {\n Object.keys(currVal).forEach(function(v) {\n recur(newObj, propName + \"[\" + v + \"]\", currVal[v]);\n });\n return newObj;\n }\n\n newObj[propName] = currVal;\n return newObj;\n }\n\n var keys = Object.keys(obj);\n return keys.reduce(function(newObj, propName) {\n return recur(newObj, propName, obj[propName]);\n }, {});\n}\n\nmodule.exports = {\n fromObj: fromObj,\n toObj: toObj\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n\n\nvar emptyFunction = __webpack_require__(6);\nvar invariant = __webpack_require__(7);\nvar ReactPropTypesSecret = __webpack_require__(8);\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n invariant(\n false,\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (false) {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar _isExisty = function _isExisty(value) {\n return value !== null && value !== undefined;\n};\nvar isEmpty = function isEmpty(value) {\n return value === '';\n};\n\nvar validations = {\n isDefaultRequiredValue: function isDefaultRequiredValue(values, value) {\n return value === undefined || value === '';\n },\n isExisty: function isExisty(values, value) {\n return _isExisty(value);\n },\n matchRegexp: function matchRegexp(values, value, regexp) {\n return !_isExisty(value) || isEmpty(value) || regexp.test(value);\n },\n isUndefined: function isUndefined(values, value) {\n return value === undefined;\n },\n isEmptyString: function isEmptyString(values, value) {\n return isEmpty(value);\n },\n isEmail: function isEmail(values, value) {\n return validations.matchRegexp(values, value, /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i);\n },\n isUrl: function isUrl(values, value) {\n return validations.matchRegexp(values, value, /^(?:\\w+:)?\\/\\/([^\\s.]+\\.\\S{2}|localhost[:?\\d]*)\\S*$/i);\n },\n isTrue: function isTrue(values, value) {\n return value === true;\n },\n isFalse: function isFalse(values, value) {\n return value === false;\n },\n isNumeric: function isNumeric(values, value) {\n if (typeof value === 'number') {\n return true;\n }\n return validations.matchRegexp(values, value, /^[-+]?(?:\\d*[.])?\\d+$/);\n },\n isAlpha: function isAlpha(values, value) {\n return validations.matchRegexp(values, value, /^[A-Z]+$/i);\n },\n isAlphanumeric: function isAlphanumeric(values, value) {\n return validations.matchRegexp(values, value, /^[0-9A-Z]+$/i);\n },\n isInt: function isInt(values, value) {\n return validations.matchRegexp(values, value, /^(?:[-+]?(?:0|[1-9]\\d*))$/);\n },\n isFloat: function isFloat(values, value) {\n return validations.matchRegexp(values, value, /^(?:[-+]?(?:\\d+))?(?:\\.\\d*)?(?:[eE][+-]?(?:\\d+))?$/);\n },\n isWords: function isWords(values, value) {\n return validations.matchRegexp(values, value, /^[A-Z\\s]+$/i);\n },\n isSpecialWords: function isSpecialWords(values, value) {\n return validations.matchRegexp(values, value, /^[A-Z\\s\\u00C0-\\u017F]+$/i);\n },\n isLength: function isLength(values, value, length) {\n return !_isExisty(value) || isEmpty(value) || value.length === length;\n },\n equals: function equals(values, value, eql) {\n return !_isExisty(value) || isEmpty(value) || value === eql;\n },\n equalsField: function equalsField(values, value, field) {\n return value === values[field];\n },\n maxLength: function maxLength(values, value, length) {\n return !_isExisty(value) || value.length <= length;\n },\n minLength: function minLength(values, value, length) {\n return !_isExisty(value) || isEmpty(value) || value.length >= length;\n }\n};\n\nexports.default = validations;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.propTypes = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _propTypes = __webpack_require__(0);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(2);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar convertValidationsToObject = function convertValidationsToObject(validations) {\n if (typeof validations === 'string') {\n return validations.split(/,(?![^{[]*[}\\]])/g).reduce(function (validationsAccumulator, validation) {\n var args = validation.split(':');\n var validateMethod = args.shift();\n\n args = args.map(function (arg) {\n try {\n return JSON.parse(arg);\n } catch (e) {\n return arg; // It is a string if it can not parse it\n }\n });\n\n if (args.length > 1) {\n throw new Error('Formsy does not support multiple args on string validations. Use object format of validations instead.');\n }\n\n // Avoid parameter reassignment\n var validationsAccumulatorCopy = Object.assign({}, validationsAccumulator);\n validationsAccumulatorCopy[validateMethod] = args.length ? args[0] : true;\n return validationsAccumulatorCopy;\n }, {});\n }\n\n return validations || {};\n};\n\nvar propTypes = {\n innerRef: _propTypes2.default.func,\n name: _propTypes2.default.string.isRequired,\n required: _propTypes2.default.bool,\n validations: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.string]),\n value: _propTypes2.default.string // eslint-disable-line\n};\n\nexports.propTypes = propTypes;\n\nexports.default = function (Component) {\n var WrappedComponent = function (_React$Component) {\n _inherits(WrappedComponent, _React$Component);\n\n function WrappedComponent(props) {\n _classCallCheck(this, WrappedComponent);\n\n var _this = _possibleConstructorReturn(this, (WrappedComponent.__proto__ || Object.getPrototypeOf(WrappedComponent)).call(this, props));\n\n _this.state = {\n value: props.value,\n isRequired: false,\n isValid: true,\n isPristine: true,\n pristineValue: props.value,\n validationError: [],\n externalError: null,\n formSubmitted: false\n };\n _this.getErrorMessage = _this.getErrorMessage.bind(_this);\n _this.getErrorMessages = _this.getErrorMessages.bind(_this);\n _this.getValue = _this.getValue.bind(_this);\n _this.isFormDisabled = _this.isFormDisabled.bind(_this);\n _this.isPristine = _this.isPristine.bind(_this);\n _this.isRequired = _this.isRequired.bind(_this);\n _this.isValid = _this.isValid.bind(_this);\n _this.resetValue = _this.resetValue.bind(_this);\n _this.setValue = _this.setValue.bind(_this);\n _this.showRequired = _this.showRequired.bind(_this);\n return _this;\n }\n\n _createClass(WrappedComponent, [{\n key: 'componentWillMount',\n value: function componentWillMount() {\n var _this2 = this;\n\n var configure = function configure() {\n _this2.setValidations(_this2.props.validations, _this2.props.required);\n\n // Pass a function instead?\n _this2.context.formsy.attachToForm(_this2);\n };\n\n if (!this.props.name) {\n throw new Error('Form Input requires a name property when used');\n }\n\n configure();\n }\n\n // We have to make sure the validate method is kept when new props are added\n\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n this.setValidations(nextProps.validations, nextProps.required);\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps) {\n // If the value passed has changed, set it. If value is not passed it will\n // internally update, and this will never run\n if (!_utils2.default.isSame(this.props.value, prevProps.value)) {\n this.setValue(this.props.value);\n }\n\n // If validations or required is changed, run a new validation\n if (!_utils2.default.isSame(this.props.validations, prevProps.validations) || !_utils2.default.isSame(this.props.required, prevProps.required)) {\n this.context.formsy.validate(this);\n }\n }\n\n // Detach it when component unmounts\n\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.context.formsy.detachFromForm(this);\n }\n }, {\n key: 'getErrorMessage',\n value: function getErrorMessage() {\n var messages = this.getErrorMessages();\n return messages.length ? messages[0] : null;\n }\n }, {\n key: 'getErrorMessages',\n value: function getErrorMessages() {\n return !this.isValid() || this.showRequired() ? this.state.externalError || this.state.validationError || [] : [];\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.state.value;\n }\n }, {\n key: 'hasValue',\n value: function hasValue() {\n return this.state.value !== '';\n }\n }, {\n key: 'isFormDisabled',\n value: function isFormDisabled() {\n return this.context.formsy.isFormDisabled();\n }\n }, {\n key: 'isFormSubmitted',\n value: function isFormSubmitted() {\n return this.state.formSubmitted;\n }\n }, {\n key: 'isPristine',\n value: function isPristine() {\n return this.state.isPristine;\n }\n }, {\n key: 'isRequired',\n value: function isRequired() {\n return !!this.props.required;\n }\n }, {\n key: 'isValid',\n value: function isValid() {\n return this.state.isValid;\n }\n }, {\n key: 'isValidValue',\n value: function isValidValue(value) {\n return this.context.formsy.isValidValue.call(null, this, value);\n // return this.props.isValidValue.call(null, this, value);\n }\n }, {\n key: 'resetValue',\n value: function resetValue() {\n var _this3 = this;\n\n this.setState({\n value: this.state.pristineValue,\n isPristine: true\n }, function () {\n _this3.context.formsy.validate(_this3);\n });\n }\n }, {\n key: 'setValidations',\n value: function setValidations(validations, required) {\n // Add validations to the store itself as the props object can not be modified\n this.validations = convertValidationsToObject(validations) || {};\n this.requiredValidations = required === true ? { isDefaultRequiredValue: true } : convertValidationsToObject(required);\n }\n\n // By default, we validate after the value has been set.\n // A user can override this and pass a second parameter of `false` to skip validation.\n\n }, {\n key: 'setValue',\n value: function setValue(value) {\n var _this4 = this;\n\n var validate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (!validate) {\n this.setState({\n value: value\n });\n } else {\n this.setState({\n value: value,\n isPristine: false\n }, function () {\n _this4.context.formsy.validate(_this4);\n });\n }\n }\n }, {\n key: 'showError',\n value: function showError() {\n return !this.showRequired() && !this.isValid();\n }\n }, {\n key: 'showRequired',\n value: function showRequired() {\n return this.state.isRequired;\n }\n }, {\n key: 'render',\n value: function render() {\n var innerRef = this.props.innerRef;\n\n var propsForElement = _extends({\n getErrorMessage: this.getErrorMessage,\n getErrorMessages: this.getErrorMessages,\n getValue: this.getValue,\n hasValue: this.hasValue,\n isFormDisabled: this.isFormDisabled,\n isValid: this.isValid,\n isPristine: this.isPristine,\n isFormSubmitted: this.isFormSubmitted,\n isRequired: this.isRequired,\n isValidValue: this.isValidValue,\n resetValue: this.resetValue,\n setValidations: this.setValidations,\n setValue: this.setValue,\n showRequired: this.showRequired,\n showError: this.showError\n }, this.props);\n\n if (innerRef) {\n propsForElement.ref = innerRef;\n }\n\n return _react2.default.createElement(Component, propsForElement);\n }\n }]);\n\n return WrappedComponent;\n }(_react2.default.Component);\n\n function getDisplayName(component) {\n return component.displayName || component.name || (typeof component === 'string' ? component : 'Component');\n }\n\n WrappedComponent.displayName = 'Formsy(' + getDisplayName(Component) + ')';\n\n WrappedComponent.contextTypes = {\n formsy: _propTypes2.default.object // What about required?\n };\n\n WrappedComponent.defaultProps = {\n innerRef: function innerRef() {},\n required: false,\n validationError: '',\n validationErrors: {},\n validations: null,\n value: Component.defaultValue\n };\n\n WrappedComponent.propTypes = propTypes;\n\n return WrappedComponent;\n};\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// formsy-react.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 361977019373f0255897","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/prop-types/index.js\n// module id = 0\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react\"\n// module id = 1\n// module chunks = 0","export default {\n arraysDiffer(a, b) {\n let isDifferent = false;\n if (a.length !== b.length) {\n isDifferent = true;\n } else {\n a.forEach((item, index) => {\n if (!this.isSame(item, b[index])) {\n isDifferent = true;\n }\n }, this);\n }\n return isDifferent;\n },\n\n objectsDiffer(a, b) {\n let isDifferent = false;\n if (Object.keys(a).length !== Object.keys(b).length) {\n isDifferent = true;\n } else {\n Object.keys(a).forEach((key) => {\n if (!this.isSame(a[key], b[key])) {\n isDifferent = true;\n }\n }, this);\n }\n return isDifferent;\n },\n\n isSame(a, b) {\n if (typeof a !== typeof b) {\n return false;\n } else if (Array.isArray(a) && Array.isArray(b)) {\n return !this.arraysDiffer(a, b);\n } else if (typeof a === 'function') {\n return a.toString() === b.toString();\n } else if (typeof a === 'object' && a !== null && b !== null) {\n return !this.objectsDiffer(a, b);\n }\n\n return a === b;\n },\n\n find(collection, fn) {\n for (let i = 0, l = collection.length; i < l; i += 1) {\n const item = collection[i];\n if (fn(item)) {\n return item;\n }\n }\n return null;\n },\n\n runRules(value, currentValues, validations, validationRules) {\n const results = {\n errors: [],\n failed: [],\n success: [],\n };\n\n if (Object.keys(validations).length) {\n Object.keys(validations).forEach((validationMethod) => {\n if (validationRules[validationMethod] && typeof validations[validationMethod] === 'function') {\n throw new Error(`Formsy does not allow you to override default validations: ${validationMethod}`);\n }\n\n if (!validationRules[validationMethod] && typeof validations[validationMethod] !== 'function') {\n throw new Error(`Formsy does not have the validation rule: ${validationMethod}`);\n }\n\n if (typeof validations[validationMethod] === 'function') {\n const validation = validations[validationMethod](currentValues, value);\n if (typeof validation === 'string') {\n results.errors.push(validation);\n results.failed.push(validationMethod);\n } else if (!validation) {\n results.failed.push(validationMethod);\n }\n return;\n } else if (typeof validations[validationMethod] !== 'function') {\n const validation = validationRules[validationMethod](\n currentValues, value, validations[validationMethod],\n );\n if (typeof validation === 'string') {\n results.errors.push(validation);\n results.failed.push(validationMethod);\n } else if (!validation) {\n results.failed.push(validationMethod);\n } else {\n results.success.push(validationMethod);\n }\n return;\n }\n\n results.success.push(validationMethod);\n });\n }\n\n return results;\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils.js","import formDataToObject from 'form-data-to-object';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport utils from './utils';\nimport validationRules from './validationRules';\nimport Wrapper, { propTypes } from './Wrapper';\n\nclass Formsy extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isValid: true,\n isSubmitting: false,\n canChange: false,\n };\n this.inputs = [];\n this.attachToForm = this.attachToForm.bind(this);\n this.detachFromForm = this.detachFromForm.bind(this);\n this.getCurrentValues = this.getCurrentValues.bind(this);\n this.getPristineValues = this.getPristineValues.bind(this);\n this.isChanged = this.isChanged.bind(this);\n this.isFormDisabled = this.isFormDisabled.bind(this);\n this.reset = this.reset.bind(this);\n this.runValidation = this.runValidation.bind(this);\n this.submit = this.submit.bind(this);\n this.updateInputsWithError = this.updateInputsWithError.bind(this);\n this.validate = this.validate.bind(this);\n this.validateForm = this.validateForm.bind(this);\n }\n\n getChildContext() {\n return {\n formsy: {\n attachToForm: this.attachToForm,\n detachFromForm: this.detachFromForm,\n validate: this.validate,\n isFormDisabled: this.isFormDisabled,\n isValidValue: (component, value) => this.runValidation(component, value).isValid,\n },\n };\n }\n\n componentDidMount() {\n this.validateForm();\n }\n\n componentWillUpdate() {\n // Keep a reference to input names before form updates,\n // to check if inputs has changed after render\n this.prevInputNames = this.inputs.map(component => component.props.name);\n }\n\n componentDidUpdate() {\n if (this.props.validationErrors && typeof this.props.validationErrors === 'object' && Object.keys(this.props.validationErrors).length > 0) {\n this.setInputValidationErrors(this.props.validationErrors);\n }\n\n const newInputNames = this.inputs.map(component => component.props.name);\n if (utils.arraysDiffer(this.prevInputNames, newInputNames)) {\n this.validateForm();\n }\n }\n\n // Method put on each input component to register\n // itself to the form\n attachToForm(component) {\n if (this.inputs.indexOf(component) === -1) {\n this.inputs.push(component);\n }\n\n this.validate(component);\n }\n\n // Method put on each input component to unregister\n // itself from the form\n detachFromForm(component) {\n const componentPos = this.inputs.indexOf(component);\n\n if (componentPos !== -1) {\n this.inputs = this.inputs.slice(0, componentPos).concat(this.inputs.slice(componentPos + 1));\n }\n\n this.validateForm();\n }\n\n getCurrentValues() {\n return this.inputs.reduce((data, component) => {\n const name = component.props.name;\n const dataCopy = Object.assign({}, data); // avoid param reassignment\n dataCopy[name] = component.state.value;\n return dataCopy;\n }, {});\n }\n\n getModel() {\n const currentValues = this.getCurrentValues();\n return this.mapModel(currentValues);\n }\n\n getPristineValues() {\n return this.inputs.reduce((data, component) => {\n const name = component.props.name;\n const dataCopy = Object.assign({}, data); // avoid param reassignment\n dataCopy[name] = component.props.value;\n return dataCopy;\n }, {});\n }\n\n // Checks if the values have changed from their initial value\n isChanged() {\n return !utils.isSame(this.getPristineValues(), this.getCurrentValues());\n }\n\n isFormDisabled() {\n return this.props.disabled;\n }\n\n mapModel(model) {\n if (this.props.mapping) {\n return this.props.mapping(model);\n }\n\n return formDataToObject.toObj(Object.keys(model).reduce((mappedModel, key) => {\n const keyArray = key.split('.');\n let base = mappedModel;\n while (keyArray.length) {\n const currentKey = keyArray.shift();\n base[currentKey] = (keyArray.length ? base[currentKey] || {} : model[key]);\n base = base[currentKey];\n }\n return mappedModel;\n }, {}));\n }\n\n reset(data) {\n this.setFormPristine(true);\n this.resetModel(data);\n }\n\n // Reset each key in the model to the original / initial / specified value\n resetModel(data) {\n this.inputs.forEach((component) => {\n const name = component.props.name;\n if (data && Object.prototype.hasOwnProperty.call(data, name)) {\n component.setValue(data[name]);\n } else {\n component.resetValue();\n }\n });\n this.validateForm();\n }\n\n // Checks validation on current value or a passed value\n runValidation(component, value = component.state.value) {\n const currentValues = this.getCurrentValues();\n const validationErrors = component.props.validationErrors;\n const validationError = component.props.validationError;\n\n const validationResults = utils.runRules(\n value, currentValues, component.validations, validationRules,\n );\n const requiredResults = utils.runRules(\n value, currentValues, component.requiredValidations, validationRules,\n );\n\n const isRequired = Object.keys(component.requiredValidations).length ?\n !!requiredResults.success.length : false;\n const isValid = !validationResults.failed.length &&\n !(this.props.validationErrors && this.props.validationErrors[component.props.name]);\n\n return {\n isRequired,\n isValid: isRequired ? false : isValid,\n error: (() => {\n if (isValid && !isRequired) {\n return [];\n }\n\n if (validationResults.errors.length) {\n return validationResults.errors;\n }\n\n if (this.props.validationErrors && this.props.validationErrors[component.props.name]) {\n return typeof this.props.validationErrors[component.props.name] === 'string' ? [this.props.validationErrors[component.props.name]] : this.props.validationErrors[component.props.name];\n }\n\n if (isRequired) {\n const error = validationErrors[requiredResults.success[0]];\n return error ? [error] : null;\n }\n\n if (validationResults.failed.length) {\n return validationResults.failed.map(failed =>\n (validationErrors[failed] ? validationErrors[failed] : validationError))\n .filter((x, pos, arr) => arr.indexOf(x) === pos); // remove duplicates\n }\n\n return undefined;\n })(),\n };\n }\n\n setInputValidationErrors(errors) {\n this.inputs.forEach((component) => {\n const name = component.props.name;\n const args = [{\n isValid: !(name in errors),\n validationError: typeof errors[name] === 'string' ? [errors[name]] : errors[name],\n }];\n component.setState(...args);\n });\n }\n\n setFormPristine(isPristine) {\n this.setState({\n formSubmitted: !isPristine,\n });\n\n // Iterate through each component and set it as pristine\n // or \"dirty\".\n this.inputs.forEach((component) => {\n component.setState({\n formSubmitted: !isPristine,\n isPristine,\n });\n });\n }\n\n // Update model, submit to url prop and send the model\n submit(event) {\n if (event && event.preventDefault) {\n event.preventDefault();\n }\n\n // Trigger form as not pristine.\n // If any inputs have not been touched yet this will make them dirty\n // so validation becomes visible (if based on isPristine)\n this.setFormPristine(false);\n const model = this.getModel();\n this.props.onSubmit(model, this.resetModel, this.updateInputsWithError);\n if (this.state.isValid) {\n this.props.onValidSubmit(model, this.resetModel, this.updateInputsWithError);\n } else {\n this.props.onInvalidSubmit(model, this.resetModel, this.updateInputsWithError);\n }\n }\n\n // Go through errors from server and grab the components\n // stored in the inputs map. Change their state to invalid\n // and set the serverError message\n updateInputsWithError(errors) {\n Object.keys(errors).forEach((name) => {\n const component = utils.find(this.inputs, input => input.props.name === name);\n if (!component) {\n throw new Error(`You are trying to update an input that does not exist. Verify errors object with input names. ${JSON.stringify(errors)}`);\n }\n const args = [{\n isValid: this.props.preventExternalInvalidation,\n externalError: typeof errors[name] === 'string' ? [errors[name]] : errors[name],\n }];\n component.setState(...args);\n });\n }\n\n // Use the binded values and the actual input value to\n // validate the input and set its state. Then check the\n // state of the form itself\n validate(component) {\n // Trigger onChange\n if (this.state.canChange) {\n this.props.onChange(this.getCurrentValues(), this.isChanged());\n }\n\n const validation = this.runValidation(component);\n // Run through the validations, split them up and call\n // the validator IF there is a value or it is required\n component.setState({\n isValid: validation.isValid,\n isRequired: validation.isRequired,\n validationError: validation.error,\n externalError: null,\n }, this.validateForm);\n }\n\n // Validate the form by going through all child input components\n // and check their state\n validateForm() {\n // We need a callback as we are validating all inputs again. This will\n // run when the last component has set its state\n const onValidationComplete = () => {\n const allIsValid = this.inputs.every(component => component.state.isValid);\n\n this.setState({\n isValid: allIsValid,\n });\n\n if (allIsValid) {\n this.props.onValid();\n } else {\n this.props.onInvalid();\n }\n\n // Tell the form that it can start to trigger change events\n this.setState({\n canChange: true,\n });\n };\n\n // Run validation again in case affected by other inputs. The\n // last component validated will run the onValidationComplete callback\n this.inputs.forEach((component, index) => {\n const validation = this.runValidation(component);\n if (validation.isValid && component.state.externalError) {\n validation.isValid = false;\n }\n component.setState({\n isValid: validation.isValid,\n isRequired: validation.isRequired,\n validationError: validation.error,\n externalError: !validation.isValid && component.state.externalError ?\n component.state.externalError : null,\n }, index === this.inputs.length - 1 ? onValidationComplete : null);\n });\n\n // If there are no inputs, set state where form is ready to trigger\n // change event. New inputs might be added later\n if (!this.inputs.length) {\n this.setState({\n canChange: true,\n });\n }\n }\n\n render() {\n const {\n getErrorMessage,\n getErrorMessages,\n getValue,\n hasValue,\n isFormDisabled,\n isFormSubmitted,\n isPristine,\n isRequired,\n isValid,\n isValidValue,\n mapping,\n onChange,\n // onError,\n onInvalidSubmit,\n onInvalid,\n onSubmit,\n onValid,\n onValidSubmit,\n preventExternalInvalidation,\n // reset,\n resetValue,\n setValidations,\n setValue,\n showError,\n showRequired,\n validationErrors,\n ...nonFormsyProps\n } = this.props;\n\n return React.createElement(\n 'form',\n {\n onSubmit: this.submit,\n ...nonFormsyProps,\n },\n this.props.children,\n );\n }\n}\n\nFormsy.displayName = 'Formsy';\n\nFormsy.defaultProps = {\n children: null,\n disabled: false,\n getErrorMessage: () => {},\n getErrorMessages: () => {},\n getValue: () => {},\n hasValue: () => {},\n isFormDisabled: () => {},\n isFormSubmitted: () => {},\n isPristine: () => {},\n isRequired: () => {},\n isValid: () => {},\n isValidValue: () => {},\n mapping: null,\n onChange: () => {},\n onError: () => {},\n onInvalid: () => {},\n onInvalidSubmit: () => {},\n onSubmit: () => {},\n onValid: () => {},\n onValidSubmit: () => {},\n preventExternalInvalidation: false,\n resetValue: () => {},\n setValidations: () => {},\n setValue: () => {},\n showError: () => {},\n showRequired: () => {},\n validationErrors: null,\n};\n\nFormsy.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n getErrorMessage: PropTypes.func,\n getErrorMessages: PropTypes.func,\n getValue: PropTypes.func,\n hasValue: PropTypes.func,\n isFormDisabled: PropTypes.func,\n isFormSubmitted: PropTypes.func,\n isPristine: PropTypes.func,\n isRequired: PropTypes.func,\n isValid: PropTypes.func,\n isValidValue: PropTypes.func,\n mapping: PropTypes.object, // eslint-disable-line\n preventExternalInvalidation: PropTypes.bool,\n onChange: PropTypes.func,\n onInvalid: PropTypes.func,\n onInvalidSubmit: PropTypes.func,\n onSubmit: PropTypes.func,\n onValid: PropTypes.func,\n onValidSubmit: PropTypes.func,\n resetValue: PropTypes.func,\n setValidations: PropTypes.func,\n setValue: PropTypes.func,\n showError: PropTypes.func,\n showRequired: PropTypes.func,\n validationErrors: PropTypes.object, // eslint-disable-line\n};\n\nFormsy.childContextTypes = {\n formsy: PropTypes.object,\n};\n\nconst addValidationRule = (name, func) => {\n validationRules[name] = func;\n};\n\nconst withFormsy = Wrapper;\n\nexport {\n addValidationRule,\n propTypes,\n withFormsy,\n};\n\nexport default Formsy;\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","function toObj(source) {\n return Object.keys(source).reduce(function (output, key) {\n var parentKey = key.match(/[^\\[]*/i);\n var paths = key.match(/\\[.*?\\]/g) || [];\n paths = [parentKey[0]].concat(paths).map(function (key) {\n return key.replace(/\\[|\\]/g, '');\n });\n var currentPath = output;\n while (paths.length) {\n var pathKey = paths.shift();\n\n if (pathKey in currentPath) {\n currentPath = currentPath[pathKey];\n } else {\n currentPath[pathKey] = paths.length ? isNaN(paths[0]) ? {} : [] : source[key];\n currentPath = currentPath[pathKey];\n }\n }\n\n return output;\n }, {});\n}\n\nfunction fromObj(obj) {\n function recur(newObj, propName, currVal) {\n if (Array.isArray(currVal) || Object.prototype.toString.call(currVal) === '[object Object]') {\n Object.keys(currVal).forEach(function(v) {\n recur(newObj, propName + \"[\" + v + \"]\", currVal[v]);\n });\n return newObj;\n }\n\n newObj[propName] = currVal;\n return newObj;\n }\n\n var keys = Object.keys(obj);\n return keys.reduce(function(newObj, propName) {\n return recur(newObj, propName, obj[propName]);\n }, {});\n}\n\nmodule.exports = {\n fromObj: fromObj,\n toObj: toObj\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/form-data-to-object/index.js\n// module id = 4\n// module chunks = 0","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar invariant = require('fbjs/lib/invariant');\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n invariant(\n false,\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/prop-types/factoryWithThrowingShims.js\n// module id = 5\n// module chunks = 0","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/emptyFunction.js\n// module id = 6\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (process.env.NODE_ENV !== 'production') {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/invariant.js\n// module id = 7\n// module chunks = 0","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/prop-types/lib/ReactPropTypesSecret.js\n// module id = 8\n// module chunks = 0","const isExisty = value => value !== null && value !== undefined;\nconst isEmpty = value => value === '';\n\nconst validations = {\n isDefaultRequiredValue(values, value) {\n return value === undefined || value === '';\n },\n isExisty(values, value) {\n return isExisty(value);\n },\n matchRegexp(values, value, regexp) {\n return !isExisty(value) || isEmpty(value) || regexp.test(value);\n },\n isUndefined(values, value) {\n return value === undefined;\n },\n isEmptyString(values, value) {\n return isEmpty(value);\n },\n isEmail(values, value) {\n return validations.matchRegexp(values, value, /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i);\n },\n isUrl(values, value) {\n return validations.matchRegexp(values, value, /^(?:\\w+:)?\\/\\/([^\\s.]+\\.\\S{2}|localhost[:?\\d]*)\\S*$/i);\n },\n isTrue(values, value) {\n return value === true;\n },\n isFalse(values, value) {\n return value === false;\n },\n isNumeric(values, value) {\n if (typeof value === 'number') {\n return true;\n }\n return validations.matchRegexp(values, value, /^[-+]?(?:\\d*[.])?\\d+$/);\n },\n isAlpha(values, value) {\n return validations.matchRegexp(values, value, /^[A-Z]+$/i);\n },\n isAlphanumeric(values, value) {\n return validations.matchRegexp(values, value, /^[0-9A-Z]+$/i);\n },\n isInt(values, value) {\n return validations.matchRegexp(values, value, /^(?:[-+]?(?:0|[1-9]\\d*))$/);\n },\n isFloat(values, value) {\n return validations.matchRegexp(values, value, /^(?:[-+]?(?:\\d+))?(?:\\.\\d*)?(?:[eE][+-]?(?:\\d+))?$/);\n },\n isWords(values, value) {\n return validations.matchRegexp(values, value, /^[A-Z\\s]+$/i);\n },\n isSpecialWords(values, value) {\n return validations.matchRegexp(values, value, /^[A-Z\\s\\u00C0-\\u017F]+$/i);\n },\n isLength(values, value, length) {\n return !isExisty(value) || isEmpty(value) || value.length === length;\n },\n equals(values, value, eql) {\n return !isExisty(value) || isEmpty(value) || value === eql;\n },\n equalsField(values, value, field) {\n return value === values[field];\n },\n maxLength(values, value, length) {\n return !isExisty(value) || value.length <= length;\n },\n minLength(values, value, length) {\n return !isExisty(value) || isEmpty(value) || value.length >= length;\n },\n};\n\nexport default validations;\n\n\n\n// WEBPACK FOOTER //\n// ./src/validationRules.js","import PropTypes from 'prop-types';\nimport React from 'react';\nimport utils from './utils';\n\nconst convertValidationsToObject = (validations) => {\n if (typeof validations === 'string') {\n return validations.split(/,(?![^{[]*[}\\]])/g).reduce((validationsAccumulator, validation) => {\n let args = validation.split(':');\n const validateMethod = args.shift();\n\n args = args.map((arg) => {\n try {\n return JSON.parse(arg);\n } catch (e) {\n return arg; // It is a string if it can not parse it\n }\n });\n\n if (args.length > 1) {\n throw new Error('Formsy does not support multiple args on string validations. Use object format of validations instead.');\n }\n\n // Avoid parameter reassignment\n const validationsAccumulatorCopy = Object.assign({}, validationsAccumulator);\n validationsAccumulatorCopy[validateMethod] = args.length ? args[0] : true;\n return validationsAccumulatorCopy;\n }, {});\n }\n\n return validations || {};\n};\n\nconst propTypes = {\n innerRef: PropTypes.func,\n name: PropTypes.string.isRequired,\n required: PropTypes.bool,\n validations: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string,\n ]),\n value: PropTypes.string, // eslint-disable-line\n};\n\nexport {\n propTypes,\n};\n\nexport default (Component) => {\n class WrappedComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n isRequired: false,\n isValid: true,\n isPristine: true,\n pristineValue: props.value,\n validationError: [],\n externalError: null,\n formSubmitted: false,\n };\n this.getErrorMessage = this.getErrorMessage.bind(this);\n this.getErrorMessages = this.getErrorMessages.bind(this);\n this.getValue = this.getValue.bind(this);\n this.isFormDisabled = this.isFormDisabled.bind(this);\n this.isPristine = this.isPristine.bind(this);\n this.isRequired = this.isRequired.bind(this);\n this.isValid = this.isValid.bind(this);\n this.resetValue = this.resetValue.bind(this);\n this.setValue = this.setValue.bind(this);\n this.showRequired = this.showRequired.bind(this);\n }\n\n componentWillMount() {\n const configure = () => {\n this.setValidations(this.props.validations, this.props.required);\n\n // Pass a function instead?\n this.context.formsy.attachToForm(this);\n };\n\n if (!this.props.name) {\n throw new Error('Form Input requires a name property when used');\n }\n\n configure();\n }\n\n // We have to make sure the validate method is kept when new props are added\n componentWillReceiveProps(nextProps) {\n this.setValidations(nextProps.validations, nextProps.required);\n }\n\n componentDidUpdate(prevProps) {\n // If the value passed has changed, set it. If value is not passed it will\n // internally update, and this will never run\n if (!utils.isSame(this.props.value, prevProps.value)) {\n this.setValue(this.props.value);\n }\n\n // If validations or required is changed, run a new validation\n if (!utils.isSame(this.props.validations, prevProps.validations) ||\n !utils.isSame(this.props.required, prevProps.required)) {\n this.context.formsy.validate(this);\n }\n }\n\n // Detach it when component unmounts\n componentWillUnmount() {\n this.context.formsy.detachFromForm(this);\n }\n\n getErrorMessage() {\n const messages = this.getErrorMessages();\n return messages.length ? messages[0] : null;\n }\n\n getErrorMessages() {\n return !this.isValid() || this.showRequired() ?\n (this.state.externalError || this.state.validationError || []) : [];\n }\n\n getValue() {\n return this.state.value;\n }\n\n hasValue() {\n return this.state.value !== '';\n }\n\n isFormDisabled() {\n return this.context.formsy.isFormDisabled();\n }\n\n isFormSubmitted() {\n return this.state.formSubmitted;\n }\n\n isPristine() {\n return this.state.isPristine;\n }\n\n isRequired() {\n return !!this.props.required;\n }\n\n isValid() {\n return this.state.isValid;\n }\n\n isValidValue(value) {\n return this.context.formsy.isValidValue.call(null, this, value);\n // return this.props.isValidValue.call(null, this, value);\n }\n\n resetValue() {\n this.setState({\n value: this.state.pristineValue,\n isPristine: true,\n }, () => {\n this.context.formsy.validate(this);\n });\n }\n\n setValidations(validations, required) {\n // Add validations to the store itself as the props object can not be modified\n this.validations = convertValidationsToObject(validations) || {};\n this.requiredValidations = required === true ? { isDefaultRequiredValue: true } :\n convertValidationsToObject(required);\n }\n\n // By default, we validate after the value has been set.\n // A user can override this and pass a second parameter of `false` to skip validation.\n setValue(value, validate = true) {\n if (!validate) {\n this.setState({\n value,\n });\n } else {\n this.setState({\n value,\n isPristine: false,\n }, () => {\n this.context.formsy.validate(this);\n });\n }\n }\n\n showError() {\n return !this.showRequired() && !this.isValid();\n }\n\n showRequired() {\n return this.state.isRequired;\n }\n\n render() {\n const { innerRef } = this.props;\n const propsForElement = {\n getErrorMessage: this.getErrorMessage,\n getErrorMessages: this.getErrorMessages,\n getValue: this.getValue,\n hasValue: this.hasValue,\n isFormDisabled: this.isFormDisabled,\n isValid: this.isValid,\n isPristine: this.isPristine,\n isFormSubmitted: this.isFormSubmitted,\n isRequired: this.isRequired,\n isValidValue: this.isValidValue,\n resetValue: this.resetValue,\n setValidations: this.setValidations,\n setValue: this.setValue,\n showRequired: this.showRequired,\n showError: this.showError,\n ...this.props,\n };\n\n if (innerRef) {\n propsForElement.ref = innerRef;\n }\n\n return React.createElement(Component, propsForElement);\n }\n }\n\n function getDisplayName(component) {\n return (\n component.displayName ||\n component.name ||\n (typeof component === 'string' ? component : 'Component')\n );\n }\n\n WrappedComponent.displayName = `Formsy(${getDisplayName(Component)})`;\n\n WrappedComponent.contextTypes = {\n formsy: PropTypes.object, // What about required?\n };\n\n WrappedComponent.defaultProps = {\n innerRef: () => {},\n required: false,\n validationError: '',\n validationErrors: {},\n validations: null,\n value: Component.defaultValue,\n };\n\n WrappedComponent.propTypes = propTypes;\n\n return WrappedComponent;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/Wrapper.js"],"sourceRoot":""} \ No newline at end of file diff --git a/src/Decorator.js b/src/Decorator.js deleted file mode 100644 index 4bff27a7..00000000 --- a/src/Decorator.js +++ /dev/null @@ -1,30 +0,0 @@ -var React = global.React || require('react'); -var createReactClass = require('create-react-class'); -var Mixin = require('./Mixin.js'); -module.exports = function () { - return function (Component) { - return createReactClass({ - mixins: [Mixin], - render: function () { - return React.createElement(Component, { - setValidations: this.setValidations, - setValue: this.setValue, - resetValue: this.resetValue, - getValue: this.getValue, - hasValue: this.hasValue, - getErrorMessage: this.getErrorMessage, - getErrorMessages: this.getErrorMessages, - isFormDisabled: this.isFormDisabled, - isValid: this.isValid, - isPristine: this.isPristine, - isFormSubmitted: this.isFormSubmitted, - isRequired: this.isRequired, - showRequired: this.showRequired, - showError: this.showError, - isValidValue: this.isValidValue, - ...this.props - }); - } - }); - }; -}; diff --git a/src/HOC.js b/src/HOC.js deleted file mode 100644 index 15255c1e..00000000 --- a/src/HOC.js +++ /dev/null @@ -1,44 +0,0 @@ -var React = global.React || require('react'); -var createReactClass = require('create-react-class'); -var Mixin = require('./Mixin.js'); -module.exports = function (Component) { - return createReactClass({ - displayName: 'Formsy(' + getDisplayName(Component) + ')', - mixins: [Mixin], - - render: function () { - const { innerRef } = this.props; - const propsForElement = { - setValidations: this.setValidations, - setValue: this.setValue, - resetValue: this.resetValue, - getValue: this.getValue, - hasValue: this.hasValue, - getErrorMessage: this.getErrorMessage, - getErrorMessages: this.getErrorMessages, - isFormDisabled: this.isFormDisabled, - isValid: this.isValid, - isPristine: this.isPristine, - isFormSubmitted: this.isFormSubmitted, - isRequired: this.isRequired, - showRequired: this.showRequired, - showError: this.showError, - isValidValue: this.isValidValue, - ...this.props - }; - - if (innerRef) { - propsForElement.ref = innerRef; - } - return React.createElement(Component, propsForElement); - } - }); -}; - -function getDisplayName(Component) { - return ( - Component.displayName || - Component.name || - (typeof Component === 'string' ? Component : 'Component') - ); -} diff --git a/src/Mixin.js b/src/Mixin.js deleted file mode 100644 index b8be8be2..00000000 --- a/src/Mixin.js +++ /dev/null @@ -1,176 +0,0 @@ -var PropTypes = require('prop-types'); -var utils = require('./utils.js'); -var React = global.React || require('react'); - -var convertValidationsToObject = function (validations) { - - if (typeof validations === 'string') { - - return validations.split(/\,(?![^{\[]*[}\]])/g).reduce(function (validations, validation) { - var args = validation.split(':'); - var validateMethod = args.shift(); - - args = args.map(function (arg) { - try { - return JSON.parse(arg); - } catch (e) { - return arg; // It is a string if it can not parse it - } - }); - - if (args.length > 1) { - throw new Error('Formsy does not support multiple args on string validations. Use object format of validations instead.'); - } - - validations[validateMethod] = args.length ? args[0] : true; - return validations; - }, {}); - - } - - return validations || {}; -}; - -module.exports = { - getInitialState: function () { - return { - _value: this.props.value, - _isRequired: false, - _isValid: true, - _isPristine: true, - _pristineValue: this.props.value, - _validationError: [], - _externalError: null, - _formSubmitted: false - }; - }, - contextTypes: { - formsy: PropTypes.object // What about required? - }, - getDefaultProps: function () { - return { - validationError: '', - validationErrors: {} - }; - }, - - componentWillMount: function () { - var configure = function () { - this.setValidations(this.props.validations, this.props.required); - - // Pass a function instead? - this.context.formsy.attachToForm(this); - //this.props._attachToForm(this); - }.bind(this); - - if (!this.props.name) { - throw new Error('Form Input requires a name property when used'); - } - - /* - if (!this.props._attachToForm) { - return setTimeout(function () { - if (!this.isMounted()) return; - if (!this.props._attachToForm) { - throw new Error('Form Mixin requires component to be nested in a Form'); - } - configure(); - }.bind(this), 0); - } - */ - configure(); - }, - - // We have to make the validate method is kept when new props are added - componentWillReceiveProps: function (nextProps) { - this.setValidations(nextProps.validations, nextProps.required); - - }, - - componentDidUpdate: function (prevProps) { - - // If the value passed has changed, set it. If value is not passed it will - // internally update, and this will never run - if (!utils.isSame(this.props.value, prevProps.value)) { - this.setValue(this.props.value); - } - - // If validations or required is changed, run a new validation - if (!utils.isSame(this.props.validations, prevProps.validations) || !utils.isSame(this.props.required, prevProps.required)) { - this.context.formsy.validate(this); - } - }, - - // Detach it when component unmounts - componentWillUnmount: function () { - this.context.formsy.detachFromForm(this); - //this.props._detachFromForm(this); - }, - - setValidations: function (validations, required) { - - // Add validations to the store itself as the props object can not be modified - this._validations = convertValidationsToObject(validations) || {}; - this._requiredValidations = required === true ? {isDefaultRequiredValue: true} : convertValidationsToObject(required); - - }, - - // We validate after the value has been set - setValue: function (value) { - this.setState({ - _value: value, - _isPristine: false - }, function () { - this.context.formsy.validate(this); - //this.props._validate(this); - }.bind(this)); - }, - resetValue: function () { - this.setState({ - _value: this.state._pristineValue, - _isPristine: true - }, function () { - this.context.formsy.validate(this); - //this.props._validate(this); - }); - }, - getValue: function () { - return this.state._value; - }, - hasValue: function () { - return this.state._value !== ''; - }, - getErrorMessage: function () { - var messages = this.getErrorMessages(); - return messages.length ? messages[0] : null; - }, - getErrorMessages: function () { - return !this.isValid() || this.showRequired() ? (this.state._externalError || this.state._validationError || []) : []; - }, - isFormDisabled: function () { - return this.context.formsy.isFormDisabled(); - //return this.props._isFormDisabled(); - }, - isValid: function () { - return this.state._isValid; - }, - isPristine: function () { - return this.state._isPristine; - }, - isFormSubmitted: function () { - return this.state._formSubmitted; - }, - isRequired: function () { - return !!this.props.required; - }, - showRequired: function () { - return this.state._isRequired; - }, - showError: function () { - return !this.showRequired() && !this.isValid(); - }, - isValidValue: function (value) { - return this.context.formsy.isValidValue.call(null, this, value); - //return this.props._isValidValue.call(null, this, value); - } -}; diff --git a/src/Wrapper.js b/src/Wrapper.js new file mode 100644 index 00000000..e9d95be9 --- /dev/null +++ b/src/Wrapper.js @@ -0,0 +1,255 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import utils from './utils'; + +const convertValidationsToObject = (validations) => { + if (typeof validations === 'string') { + return validations.split(/,(?![^{[]*[}\]])/g).reduce((validationsAccumulator, validation) => { + let args = validation.split(':'); + const validateMethod = args.shift(); + + args = args.map((arg) => { + try { + return JSON.parse(arg); + } catch (e) { + return arg; // It is a string if it can not parse it + } + }); + + if (args.length > 1) { + throw new Error('Formsy does not support multiple args on string validations. Use object format of validations instead.'); + } + + // Avoid parameter reassignment + const validationsAccumulatorCopy = Object.assign({}, validationsAccumulator); + validationsAccumulatorCopy[validateMethod] = args.length ? args[0] : true; + return validationsAccumulatorCopy; + }, {}); + } + + return validations || {}; +}; + +const propTypes = { + innerRef: PropTypes.func, + name: PropTypes.string.isRequired, + required: PropTypes.bool, + validations: PropTypes.oneOfType([ + PropTypes.object, + PropTypes.string, + ]), + value: PropTypes.oneOfType([ + PropTypes.bool, + PropTypes.string, + ]), +}; + +export { + propTypes, +}; + +export default (Component) => { + class WrappedComponent extends React.Component { + constructor(props) { + super(props); + this.state = { + value: props.value, + isRequired: false, + isValid: true, + isPristine: true, + pristineValue: props.value, + validationError: [], + externalError: null, + formSubmitted: false, + }; + this.getErrorMessage = this.getErrorMessage.bind(this); + this.getErrorMessages = this.getErrorMessages.bind(this); + this.getValue = this.getValue.bind(this); + this.isFormDisabled = this.isFormDisabled.bind(this); + this.isPristine = this.isPristine.bind(this); + this.isRequired = this.isRequired.bind(this); + this.isValid = this.isValid.bind(this); + this.resetValue = this.resetValue.bind(this); + this.setValue = this.setValue.bind(this); + this.showRequired = this.showRequired.bind(this); + } + + componentWillMount() { + const configure = () => { + this.setValidations(this.props.validations, this.props.required); + + // Pass a function instead? + this.context.formsy.attachToForm(this); + }; + + if (!this.props.name) { + throw new Error('Form Input requires a name property when used'); + } + + configure(); + } + + // We have to make sure the validate method is kept when new props are added + componentWillReceiveProps(nextProps) { + this.setValidations(nextProps.validations, nextProps.required); + } + + componentDidUpdate(prevProps) { + // If the value passed has changed, set it. If value is not passed it will + // internally update, and this will never run + if (!utils.isSame(this.props.value, prevProps.value)) { + this.setValue(this.props.value); + } + + // If validations or required is changed, run a new validation + if (!utils.isSame(this.props.validations, prevProps.validations) || + !utils.isSame(this.props.required, prevProps.required)) { + this.context.formsy.validate(this); + } + } + + // Detach it when component unmounts + componentWillUnmount() { + this.context.formsy.detachFromForm(this); + } + + getErrorMessage() { + const messages = this.getErrorMessages(); + return messages.length ? messages[0] : null; + } + + getErrorMessages() { + return !this.isValid() || this.showRequired() ? + (this.state.externalError || this.state.validationError || []) : []; + } + + getValue() { + return this.state.value; + } + + hasValue() { + return this.state.value !== ''; + } + + isFormDisabled() { + return this.context.formsy.isFormDisabled(); + } + + isFormSubmitted() { + return this.state.formSubmitted; + } + + isPristine() { + return this.state.isPristine; + } + + isRequired() { + return !!this.props.required; + } + + isValid() { + return this.state.isValid; + } + + isValidValue(value) { + return this.context.formsy.isValidValue.call(null, this, value); + // return this.props.isValidValue.call(null, this, value); + } + + resetValue() { + this.setState({ + value: this.state.pristineValue, + isPristine: true, + }, () => { + this.context.formsy.validate(this); + }); + } + + setValidations(validations, required) { + // Add validations to the store itself as the props object can not be modified + this.validations = convertValidationsToObject(validations) || {}; + this.requiredValidations = required === true ? { isDefaultRequiredValue: true } : + convertValidationsToObject(required); + } + + // By default, we validate after the value has been set. + // A user can override this and pass a second parameter of `false` to skip validation. + setValue(value, validate = true) { + if (!validate) { + this.setState({ + value, + }); + } else { + this.setState({ + value, + isPristine: false, + }, () => { + this.context.formsy.validate(this); + }); + } + } + + showError() { + return !this.showRequired() && !this.isValid(); + } + + showRequired() { + return this.state.isRequired; + } + + render() { + const { innerRef } = this.props; + const propsForElement = { + getErrorMessage: this.getErrorMessage, + getErrorMessages: this.getErrorMessages, + getValue: this.getValue, + hasValue: this.hasValue, + isFormDisabled: this.isFormDisabled, + isValid: this.isValid, + isPristine: this.isPristine, + isFormSubmitted: this.isFormSubmitted, + isRequired: this.isRequired, + isValidValue: this.isValidValue, + resetValue: this.resetValue, + setValidations: this.setValidations, + setValue: this.setValue, + showRequired: this.showRequired, + showError: this.showError, + ...this.props, + }; + + if (innerRef) { + propsForElement.ref = innerRef; + } + + return React.createElement(Component, propsForElement); + } + } + + function getDisplayName(component) { + return ( + component.displayName || + component.name || + (typeof component === 'string' ? component : 'Component') + ); + } + + WrappedComponent.displayName = `Formsy(${getDisplayName(Component)})`; + + WrappedComponent.contextTypes = { + formsy: PropTypes.object, // What about required? + }; + + WrappedComponent.defaultProps = { + innerRef: () => {}, + required: false, + validationError: '', + validationErrors: {}, + validations: null, + value: Component.defaultValue, + }; + + WrappedComponent.propTypes = propTypes; + + return WrappedComponent; +}; diff --git a/src/index.js b/src/index.js new file mode 100644 index 00000000..d84f36cf --- /dev/null +++ b/src/index.js @@ -0,0 +1,467 @@ +import formDataToObject from 'form-data-to-object'; +import PropTypes from 'prop-types'; +import React from 'react'; + +import utils from './utils'; +import validationRules from './validationRules'; +import Wrapper, { propTypes } from './Wrapper'; + +class Formsy extends React.Component { + constructor(props) { + super(props); + this.state = { + isValid: true, + isSubmitting: false, + canChange: false, + }; + this.inputs = []; + this.attachToForm = this.attachToForm.bind(this); + this.detachFromForm = this.detachFromForm.bind(this); + this.getCurrentValues = this.getCurrentValues.bind(this); + this.getPristineValues = this.getPristineValues.bind(this); + this.isChanged = this.isChanged.bind(this); + this.isFormDisabled = this.isFormDisabled.bind(this); + this.reset = this.reset.bind(this); + this.resetInternal = this.resetInternal.bind(this); + this.runValidation = this.runValidation.bind(this); + this.submit = this.submit.bind(this); + this.updateInputsWithError = this.updateInputsWithError.bind(this); + this.validate = this.validate.bind(this); + this.validateForm = this.validateForm.bind(this); + } + + getChildContext() { + return { + formsy: { + attachToForm: this.attachToForm, + detachFromForm: this.detachFromForm, + validate: this.validate, + isFormDisabled: this.isFormDisabled, + isValidValue: (component, value) => this.runValidation(component, value).isValid, + }, + }; + } + + componentDidMount() { + this.validateForm(); + } + + componentWillUpdate() { + // Keep a reference to input names before form updates, + // to check if inputs has changed after render + this.prevInputNames = this.inputs.map(component => component.props.name); + } + + componentDidUpdate() { + if (this.props.validationErrors && typeof this.props.validationErrors === 'object' && Object.keys(this.props.validationErrors).length > 0) { + this.setInputValidationErrors(this.props.validationErrors); + } + + const newInputNames = this.inputs.map(component => component.props.name); + if (utils.arraysDiffer(this.prevInputNames, newInputNames)) { + this.validateForm(); + } + } + + // Method put on each input component to register + // itself to the form + attachToForm(component) { + if (this.inputs.indexOf(component) === -1) { + this.inputs.push(component); + } + + this.validate(component); + } + + // Method put on each input component to unregister + // itself from the form + detachFromForm(component) { + const componentPos = this.inputs.indexOf(component); + + if (componentPos !== -1) { + this.inputs = this.inputs.slice(0, componentPos).concat(this.inputs.slice(componentPos + 1)); + } + + this.validateForm(); + } + + getCurrentValues() { + return this.inputs.reduce((data, component) => { + const name = component.props.name; + const dataCopy = Object.assign({}, data); // avoid param reassignment + dataCopy[name] = component.state.value; + return dataCopy; + }, {}); + } + + getModel() { + const currentValues = this.getCurrentValues(); + return this.mapModel(currentValues); + } + + getPristineValues() { + return this.inputs.reduce((data, component) => { + const name = component.props.name; + const dataCopy = Object.assign({}, data); // avoid param reassignment + dataCopy[name] = component.props.value; + return dataCopy; + }, {}); + } + + // Checks if the values have changed from their initial value + isChanged() { + return !utils.isSame(this.getPristineValues(), this.getCurrentValues()); + } + + isFormDisabled() { + return this.props.disabled; + } + + mapModel(model) { + if (this.props.mapping) { + return this.props.mapping(model); + } + + return formDataToObject.toObj(Object.keys(model).reduce((mappedModel, key) => { + const keyArray = key.split('.'); + let base = mappedModel; + while (keyArray.length) { + const currentKey = keyArray.shift(); + base[currentKey] = (keyArray.length ? base[currentKey] || {} : model[key]); + base = base[currentKey]; + } + return mappedModel; + }, {})); + } + + reset(data) { + this.setFormPristine(true); + this.resetModel(data); + } + + resetInternal(event) { + event.preventDefault(); + this.reset(); + if (this.props.onReset) { + this.props.onReset(); + } + } + + // Reset each key in the model to the original / initial / specified value + resetModel(data) { + this.inputs.forEach((component) => { + const name = component.props.name; + if (data && Object.prototype.hasOwnProperty.call(data, name)) { + component.setValue(data[name]); + } else { + component.resetValue(); + } + }); + this.validateForm(); + } + + // Checks validation on current value or a passed value + runValidation(component, value = component.state.value) { + const currentValues = this.getCurrentValues(); + const validationErrors = component.props.validationErrors; + const validationError = component.props.validationError; + + const validationResults = utils.runRules( + value, currentValues, component.validations, validationRules, + ); + const requiredResults = utils.runRules( + value, currentValues, component.requiredValidations, validationRules, + ); + + const isRequired = Object.keys(component.requiredValidations).length ? + !!requiredResults.success.length : false; + const isValid = !validationResults.failed.length && + !(this.props.validationErrors && this.props.validationErrors[component.props.name]); + + return { + isRequired, + isValid: isRequired ? false : isValid, + error: (() => { + if (isValid && !isRequired) { + return []; + } + + if (validationResults.errors.length) { + return validationResults.errors; + } + + if (this.props.validationErrors && this.props.validationErrors[component.props.name]) { + return typeof this.props.validationErrors[component.props.name] === 'string' ? [this.props.validationErrors[component.props.name]] : this.props.validationErrors[component.props.name]; + } + + if (isRequired) { + const error = validationErrors[requiredResults.success[0]]; + return error ? [error] : null; + } + + if (validationResults.failed.length) { + return validationResults.failed.map(failed => + (validationErrors[failed] ? validationErrors[failed] : validationError)) + .filter((x, pos, arr) => arr.indexOf(x) === pos); // remove duplicates + } + + return undefined; + })(), + }; + } + + setInputValidationErrors(errors) { + this.inputs.forEach((component) => { + const name = component.props.name; + const args = [{ + isValid: !(name in errors), + validationError: typeof errors[name] === 'string' ? [errors[name]] : errors[name], + }]; + component.setState(...args); + }); + } + + setFormPristine(isPristine) { + this.setState({ + formSubmitted: !isPristine, + }); + + // Iterate through each component and set it as pristine + // or "dirty". + this.inputs.forEach((component) => { + component.setState({ + formSubmitted: !isPristine, + isPristine, + }); + }); + } + + // Update model, submit to url prop and send the model + submit(event) { + if (event && event.preventDefault) { + event.preventDefault(); + } + + // Trigger form as not pristine. + // If any inputs have not been touched yet this will make them dirty + // so validation becomes visible (if based on isPristine) + this.setFormPristine(false); + const model = this.getModel(); + this.props.onSubmit(model, this.resetModel, this.updateInputsWithError); + if (this.state.isValid) { + this.props.onValidSubmit(model, this.resetModel, this.updateInputsWithError); + } else { + this.props.onInvalidSubmit(model, this.resetModel, this.updateInputsWithError); + } + } + + // Go through errors from server and grab the components + // stored in the inputs map. Change their state to invalid + // and set the serverError message + updateInputsWithError(errors) { + Object.keys(errors).forEach((name) => { + const component = utils.find(this.inputs, input => input.props.name === name); + if (!component) { + throw new Error(`You are trying to update an input that does not exist. Verify errors object with input names. ${JSON.stringify(errors)}`); + } + const args = [{ + isValid: this.props.preventExternalInvalidation, + externalError: typeof errors[name] === 'string' ? [errors[name]] : errors[name], + }]; + component.setState(...args); + }); + } + + // Use the binded values and the actual input value to + // validate the input and set its state. Then check the + // state of the form itself + validate(component) { + // Trigger onChange + if (this.state.canChange) { + this.props.onChange(this.getCurrentValues(), this.isChanged()); + } + + const validation = this.runValidation(component); + // Run through the validations, split them up and call + // the validator IF there is a value or it is required + component.setState({ + isValid: validation.isValid, + isRequired: validation.isRequired, + validationError: validation.error, + externalError: null, + }, this.validateForm); + } + + // Validate the form by going through all child input components + // and check their state + validateForm() { + // We need a callback as we are validating all inputs again. This will + // run when the last component has set its state + const onValidationComplete = () => { + const allIsValid = this.inputs.every(component => component.state.isValid); + + this.setState({ + isValid: allIsValid, + }); + + if (allIsValid) { + this.props.onValid(); + } else { + this.props.onInvalid(); + } + + // Tell the form that it can start to trigger change events + this.setState({ + canChange: true, + }); + }; + + // Run validation again in case affected by other inputs. The + // last component validated will run the onValidationComplete callback + this.inputs.forEach((component, index) => { + const validation = this.runValidation(component); + if (validation.isValid && component.state.externalError) { + validation.isValid = false; + } + component.setState({ + isValid: validation.isValid, + isRequired: validation.isRequired, + validationError: validation.error, + externalError: !validation.isValid && component.state.externalError ? + component.state.externalError : null, + }, index === this.inputs.length - 1 ? onValidationComplete : null); + }); + + // If there are no inputs, set state where form is ready to trigger + // change event. New inputs might be added later + if (!this.inputs.length) { + this.setState({ + canChange: true, + }); + } + } + + render() { + const { + getErrorMessage, + getErrorMessages, + getValue, + hasValue, + isFormDisabled, + isFormSubmitted, + isPristine, + isRequired, + isValid, + isValidValue, + mapping, + onChange, + // onError, + onInvalidSubmit, + onInvalid, + onReset, + onSubmit, + onValid, + onValidSubmit, + preventExternalInvalidation, + // reset, + resetValue, + setValidations, + setValue, + showError, + showRequired, + validationErrors, + ...nonFormsyProps + } = this.props; + + return React.createElement( + 'form', + { + onReset: this.resetInternal, + onSubmit: this.submit, + ...nonFormsyProps, + }, + this.props.children, + ); + } +} + +Formsy.displayName = 'Formsy'; + +Formsy.defaultProps = { + children: null, + disabled: false, + getErrorMessage: () => {}, + getErrorMessages: () => {}, + getValue: () => {}, + hasValue: () => {}, + isFormDisabled: () => {}, + isFormSubmitted: () => {}, + isPristine: () => {}, + isRequired: () => {}, + isValid: () => {}, + isValidValue: () => {}, + mapping: null, + onChange: () => {}, + onError: () => {}, + onInvalid: () => {}, + onInvalidSubmit: () => {}, + onReset: () => {}, + onSubmit: () => {}, + onValid: () => {}, + onValidSubmit: () => {}, + preventExternalInvalidation: false, + resetValue: () => {}, + setValidations: () => {}, + setValue: () => {}, + showError: () => {}, + showRequired: () => {}, + validationErrors: null, +}; + +Formsy.propTypes = { + children: PropTypes.node, + disabled: PropTypes.bool, + getErrorMessage: PropTypes.func, + getErrorMessages: PropTypes.func, + getValue: PropTypes.func, + hasValue: PropTypes.func, + isFormDisabled: PropTypes.func, + isFormSubmitted: PropTypes.func, + isPristine: PropTypes.func, + isRequired: PropTypes.func, + isValid: PropTypes.func, + isValidValue: PropTypes.func, + mapping: PropTypes.object, // eslint-disable-line + preventExternalInvalidation: PropTypes.bool, + onChange: PropTypes.func, + onInvalid: PropTypes.func, + onInvalidSubmit: PropTypes.func, + onReset: PropTypes.func, + onSubmit: PropTypes.func, + onValid: PropTypes.func, + onValidSubmit: PropTypes.func, + resetValue: PropTypes.func, + setValidations: PropTypes.func, + setValue: PropTypes.func, + showError: PropTypes.func, + showRequired: PropTypes.func, + validationErrors: PropTypes.object, // eslint-disable-line +}; + +Formsy.childContextTypes = { + formsy: PropTypes.object, +}; + +const addValidationRule = (name, func) => { + validationRules[name] = func; +}; + +const withFormsy = Wrapper; + +export { + addValidationRule, + propTypes, + withFormsy, +}; + +export default Formsy; diff --git a/src/main.js b/src/main.js deleted file mode 100644 index 27ee7276..00000000 --- a/src/main.js +++ /dev/null @@ -1,457 +0,0 @@ -var PropTypes = require('prop-types'); -var React = global.React || require('react'); -var createReactClass = require('create-react-class'); -var Formsy = {}; -var validationRules = require('./validationRules.js'); -var formDataToObject = require('form-data-to-object'); -var utils = require('./utils.js'); -var Mixin = require('./Mixin.js'); -var HOC = require('./HOC.js'); -var Decorator = require('./Decorator.js'); -var options = {}; -var emptyArray = []; - -Formsy.Mixin = Mixin; -Formsy.HOC = HOC; -Formsy.Decorator = Decorator; - -Formsy.defaults = function (passedOptions) { - options = passedOptions; -}; - -Formsy.addValidationRule = function (name, func) { - validationRules[name] = func; -}; - -Formsy.Form = createReactClass({ - displayName: 'Formsy', - getInitialState: function () { - return { - isValid: true, - isSubmitting: false, - canChange: false - }; - }, - getDefaultProps: function () { - return { - onSuccess: function () {}, - onError: function () {}, - onSubmit: function () {}, - onValidSubmit: function () {}, - onInvalidSubmit: function () {}, - onValid: function () {}, - onInvalid: function () {}, - onChange: function () {}, - validationErrors: null, - preventExternalInvalidation: false - }; - }, - - childContextTypes: { - formsy: PropTypes.object - }, - getChildContext: function () { - return { - formsy: { - attachToForm: this.attachToForm, - detachFromForm: this.detachFromForm, - validate: this.validate, - isFormDisabled: this.isFormDisabled, - isValidValue: (component, value) => { - return this.runValidation(component, value).isValid; - } - } - } - }, - - // Add a map to store the inputs of the form, a model to store - // the values of the form and register child inputs - componentWillMount: function () { - this.inputs = []; - }, - - componentDidMount: function () { - this.validateForm(); - }, - - componentWillUpdate: function () { - // Keep a reference to input names before form updates, - // to check if inputs has changed after render - this.prevInputNames = this.inputs.map(component => component.props.name); - }, - - componentDidUpdate: function () { - - if (this.props.validationErrors && typeof this.props.validationErrors === 'object' && Object.keys(this.props.validationErrors).length > 0) { - this.setInputValidationErrors(this.props.validationErrors); - } - - var newInputNames = this.inputs.map(component => component.props.name); - if (utils.arraysDiffer(this.prevInputNames, newInputNames)) { - this.validateForm(); - } - - }, - - // Allow resetting to specified data - reset: function (data) { - this.setFormPristine(true); - this.resetModel(data); - }, - - // Update model, submit to url prop and send the model - submit: function (event) { - - event && event.preventDefault(); - - // Trigger form as not pristine. - // If any inputs have not been touched yet this will make them dirty - // so validation becomes visible (if based on isPristine) - this.setFormPristine(false); - var model = this.getModel(); - this.props.onSubmit(model, this.resetModel, this.updateInputsWithError); - this.state.isValid ? this.props.onValidSubmit(model, this.resetModel, this.updateInputsWithError) : this.props.onInvalidSubmit(model, this.resetModel, this.updateInputsWithError); - - }, - - mapModel: function (model) { - - if (this.props.mapping) { - return this.props.mapping(model) - } else { - return formDataToObject.toObj(Object.keys(model).reduce((mappedModel, key) => { - - var keyArray = key.split('.'); - var base = mappedModel; - while (keyArray.length) { - var currentKey = keyArray.shift(); - base = (base[currentKey] = keyArray.length ? base[currentKey] || {} : model[key]); - } - - return mappedModel; - - }, {})); - } - }, - - getModel: function () { - var currentValues = this.getCurrentValues(); - return this.mapModel(currentValues); - }, - - // Reset each key in the model to the original / initial / specified value - resetModel: function (data) { - this.inputs.forEach(component => { - var name = component.props.name; - if (data && data.hasOwnProperty(name)) { - component.setValue(data[name]); - } else { - component.resetValue(); - } - }); - this.validateForm(); - }, - - setInputValidationErrors: function (errors) { - this.inputs.forEach(component => { - var name = component.props.name; - var args = [{ - _isValid: !(name in errors), - _validationError: typeof errors[name] === 'string' ? [errors[name]] : errors[name] - }]; - component.setState.apply(component, args); - }); - }, - - // Checks if the values have changed from their initial value - isChanged: function() { - return !utils.isSame(this.getPristineValues(), this.getCurrentValues()); - }, - - getPristineValues: function() { - return this.inputs.reduce((data, component) => { - var name = component.props.name; - data[name] = component.props.value; - return data; - }, {}); - }, - - // Go through errors from server and grab the components - // stored in the inputs map. Change their state to invalid - // and set the serverError message - updateInputsWithError: function (errors) { - Object.keys(errors).forEach((name, index) => { - var component = utils.find(this.inputs, component => component.props.name === name); - if (!component) { - throw new Error('You are trying to update an input that does not exist. ' + - 'Verify errors object with input names. ' + JSON.stringify(errors)); - } - var args = [{ - _isValid: this.props.preventExternalInvalidation || false, - _externalError: typeof errors[name] === 'string' ? [errors[name]] : errors[name] - }]; - component.setState.apply(component, args); - }); - }, - - isFormDisabled: function () { - return this.props.disabled; - }, - - getCurrentValues: function () { - return this.inputs.reduce((data, component) => { - var name = component.props.name; - data[name] = component.state._value; - return data; - }, {}); - }, - - setFormPristine: function (isPristine) { - this.setState({ - _formSubmitted: !isPristine - }); - - // Iterate through each component and set it as pristine - // or "dirty". - this.inputs.forEach((component, index) => { - component.setState({ - _formSubmitted: !isPristine, - _isPristine: isPristine - }); - }); - }, - - // Use the binded values and the actual input value to - // validate the input and set its state. Then check the - // state of the form itself - validate: function (component) { - - // Trigger onChange - if (this.state.canChange) { - this.props.onChange(this.getCurrentValues(), this.isChanged()); - } - - var validation = this.runValidation(component); - // Run through the validations, split them up and call - // the validator IF there is a value or it is required - component.setState({ - _isValid: validation.isValid, - _isRequired: validation.isRequired, - _validationError: validation.error, - _externalError: null - }, this.validateForm); - - }, - - // Checks validation on current value or a passed value - runValidation: function (component, value) { - - var currentValues = this.getCurrentValues(); - var validationErrors = component.props.validationErrors; - var validationError = component.props.validationError; - value = arguments.length === 2 ? value : component.state._value; - - var validationResults = this.runRules(value, currentValues, component._validations); - var requiredResults = this.runRules(value, currentValues, component._requiredValidations); - - // the component defines an explicit validate function - if (typeof component.validate === "function") { - validationResults.failed = component.validate() ? [] : ['failed']; - } - - var isRequired = Object.keys(component._requiredValidations).length ? !!requiredResults.success.length : false; - var isValid = !validationResults.failed.length && !(this.props.validationErrors && this.props.validationErrors[component.props.name]); - - return { - isRequired: isRequired, - isValid: isRequired ? false : isValid, - error: (function () { - - if (isValid && !isRequired) { - return emptyArray; - } - - if (validationResults.errors.length) { - return validationResults.errors; - } - - if (this.props.validationErrors && this.props.validationErrors[component.props.name]) { - return typeof this.props.validationErrors[component.props.name] === 'string' ? [this.props.validationErrors[component.props.name]] : this.props.validationErrors[component.props.name]; - } - - if (isRequired) { - var error = validationErrors[requiredResults.success[0]]; - return error ? [error] : null; - } - - if (validationResults.failed.length) { - return validationResults.failed.map(function(failed) { - return validationErrors[failed] ? validationErrors[failed] : validationError; - }).filter(function(x, pos, arr) { - // Remove duplicates - return arr.indexOf(x) === pos; - }); - } - - }.call(this)) - }; - - }, - - runRules: function (value, currentValues, validations) { - - var results = { - errors: [], - failed: [], - success: [] - }; - if (Object.keys(validations).length) { - Object.keys(validations).forEach(function (validationMethod) { - - if (validationRules[validationMethod] && typeof validations[validationMethod] === 'function') { - throw new Error('Formsy does not allow you to override default validations: ' + validationMethod); - } - - if (!validationRules[validationMethod] && typeof validations[validationMethod] !== 'function') { - throw new Error('Formsy does not have the validation rule: ' + validationMethod); - } - - if (typeof validations[validationMethod] === 'function') { - var validation = validations[validationMethod](currentValues, value); - if (typeof validation === 'string') { - results.errors.push(validation); - results.failed.push(validationMethod); - } else if (!validation) { - results.failed.push(validationMethod); - } - return; - - } else if (typeof validations[validationMethod] !== 'function') { - var validation = validationRules[validationMethod](currentValues, value, validations[validationMethod]); - if (typeof validation === 'string') { - results.errors.push(validation); - results.failed.push(validationMethod); - } else if (!validation) { - results.failed.push(validationMethod); - } else { - results.success.push(validationMethod); - } - return; - - } - - return results.success.push(validationMethod); - - }); - } - - return results; - - }, - - // Validate the form by going through all child input components - // and check their state - validateForm: function () { - - // We need a callback as we are validating all inputs again. This will - // run when the last component has set its state - var onValidationComplete = function () { - var allIsValid = this.inputs.every(component => { - return component.state._isValid; - }); - - this.setState({ - isValid: allIsValid - }); - - if (allIsValid) { - this.props.onValid(); - } else { - this.props.onInvalid(); - } - - // Tell the form that it can start to trigger change events - this.setState({ - canChange: true - }); - - }.bind(this); - - // Run validation again in case affected by other inputs. The - // last component validated will run the onValidationComplete callback - this.inputs.forEach((component, index) => { - var validation = this.runValidation(component); - if (validation.isValid && component.state._externalError) { - validation.isValid = false; - } - component.setState({ - _isValid: validation.isValid, - _isRequired: validation.isRequired, - _validationError: validation.error, - _externalError: !validation.isValid && component.state._externalError ? component.state._externalError : null - }, index === this.inputs.length - 1 ? onValidationComplete : null); - }); - - // If there are no inputs, set state where form is ready to trigger - // change event. New inputs might be added later - if (!this.inputs.length) { - this.setState({ - canChange: true - }); - } - }, - - // Method put on each input component to register - // itself to the form - attachToForm: function (component) { - - if (this.inputs.indexOf(component) === -1) { - this.inputs.push(component); - } - - this.validate(component); - }, - - // Method put on each input component to unregister - // itself from the form - detachFromForm: function (component) { - var componentPos = this.inputs.indexOf(component); - - if (componentPos !== -1) { - this.inputs = this.inputs.slice(0, componentPos) - .concat(this.inputs.slice(componentPos + 1)); - } - - this.validateForm(); - }, - render: function () { - var { - mapping, - validationErrors, - onSubmit, - onValid, - onValidSubmit, - onInvalid, - onInvalidSubmit, - onChange, - reset, - preventExternalInvalidation, - onSuccess, - onError, - ...nonFormsyProps - } = this.props; - - return ( -
- {this.props.children} -
- ); - - } -}); - -if (!global.exports && !global.module && (!global.define || !global.define.amd)) { - global.Formsy = Formsy; -} - -module.exports = Formsy; diff --git a/src/utils.js b/src/utils.js index f8b94a3c..54218939 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,10 +1,10 @@ -module.exports = { - arraysDiffer: function (a, b) { - var isDifferent = false; +export default { + arraysDiffer(a, b) { + let isDifferent = false; if (a.length !== b.length) { isDifferent = true; } else { - a.forEach(function (item, index) { + a.forEach((item, index) => { if (!this.isSame(item, b[index])) { isDifferent = true; } @@ -13,12 +13,12 @@ module.exports = { return isDifferent; }, - objectsDiffer: function (a, b) { - var isDifferent = false; + objectsDiffer(a, b) { + let isDifferent = false; if (Object.keys(a).length !== Object.keys(b).length) { isDifferent = true; } else { - Object.keys(a).forEach(function (key) { + Object.keys(a).forEach((key) => { if (!this.isSame(a[key], b[key])) { isDifferent = true; } @@ -27,7 +27,7 @@ module.exports = { return isDifferent; }, - isSame: function (a, b) { + isSame(a, b) { if (typeof a !== typeof b) { return false; } else if (Array.isArray(a) && Array.isArray(b)) { @@ -41,13 +41,61 @@ module.exports = { return a === b; }, - find: function (collection, fn) { - for (var i = 0, l = collection.length; i < l; i++) { - var item = collection[i]; + find(collection, fn) { + for (let i = 0, l = collection.length; i < l; i += 1) { + const item = collection[i]; if (fn(item)) { return item; } } return null; - } + }, + + runRules(value, currentValues, validations, validationRules) { + const results = { + errors: [], + failed: [], + success: [], + }; + + if (Object.keys(validations).length) { + Object.keys(validations).forEach((validationMethod) => { + if (validationRules[validationMethod] && typeof validations[validationMethod] === 'function') { + throw new Error(`Formsy does not allow you to override default validations: ${validationMethod}`); + } + + if (!validationRules[validationMethod] && typeof validations[validationMethod] !== 'function') { + throw new Error(`Formsy does not have the validation rule: ${validationMethod}`); + } + + if (typeof validations[validationMethod] === 'function') { + const validation = validations[validationMethod](currentValues, value); + if (typeof validation === 'string') { + results.errors.push(validation); + results.failed.push(validationMethod); + } else if (!validation) { + results.failed.push(validationMethod); + } + return; + } else if (typeof validations[validationMethod] !== 'function') { + const validation = validationRules[validationMethod]( + currentValues, value, validations[validationMethod], + ); + if (typeof validation === 'string') { + results.errors.push(validation); + results.failed.push(validationMethod); + } else if (!validation) { + results.failed.push(validationMethod); + } else { + results.success.push(validationMethod); + } + return; + } + + results.success.push(validationMethod); + }); + } + + return results; + }, }; diff --git a/src/validationRules.js b/src/validationRules.js index f6c0e954..c0cfc839 100644 --- a/src/validationRules.js +++ b/src/validationRules.js @@ -1,78 +1,73 @@ -var isExisty = function (value) { - return value !== null && value !== undefined; -}; - -var isEmpty = function (value) { - return value === ''; -}; +const isExisty = value => value !== null && value !== undefined; +const isEmpty = value => value === ''; -var validations = { - isDefaultRequiredValue: function (values, value) { +const validations = { + isDefaultRequiredValue(values, value) { return value === undefined || value === ''; }, - isExisty: function (values, value) { + isExisty(values, value) { return isExisty(value); }, - matchRegexp: function (values, value, regexp) { + matchRegexp(values, value, regexp) { return !isExisty(value) || isEmpty(value) || regexp.test(value); }, - isUndefined: function (values, value) { + isUndefined(values, value) { return value === undefined; }, - isEmptyString: function (values, value) { + isEmptyString(values, value) { return isEmpty(value); }, - isEmail: function (values, value) { - return validations.matchRegexp(values, value, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i); + isEmail(values, value) { + return validations.matchRegexp(values, value, /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i); }, - isUrl: function (values, value) { - return validations.matchRegexp(values, value, /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i); + isUrl(values, value) { + return validations.matchRegexp(values, value, /^(?:\w+:)?\/\/([^\s.]+\.\S{2}|localhost[:?\d]*)\S*$/i); }, - isTrue: function (values, value) { + isTrue(values, value) { return value === true; }, - isFalse: function (values, value) { + isFalse(values, value) { return value === false; }, - isNumeric: function (values, value) { + isNumeric(values, value) { if (typeof value === 'number') { return true; } return validations.matchRegexp(values, value, /^[-+]?(?:\d*[.])?\d+$/); }, - isAlpha: function (values, value) { + isAlpha(values, value) { return validations.matchRegexp(values, value, /^[A-Z]+$/i); }, - isAlphanumeric: function (values, value) { + isAlphanumeric(values, value) { return validations.matchRegexp(values, value, /^[0-9A-Z]+$/i); }, - isInt: function (values, value) { + isInt(values, value) { return validations.matchRegexp(values, value, /^(?:[-+]?(?:0|[1-9]\d*))$/); }, - isFloat: function (values, value) { - return validations.matchRegexp(values, value, /^(?:[-+]?(?:\d+))?(?:\.\d*)?(?:[eE][\+\-]?(?:\d+))?$/); + isFloat(values, value) { + return validations.matchRegexp(values, value, /^(?:[-+]?(?:\d+))?(?:\.\d*)?(?:[eE][+-]?(?:\d+))?$/); }, - isWords: function (values, value) { + isWords(values, value) { return validations.matchRegexp(values, value, /^[A-Z\s]+$/i); }, - isSpecialWords: function (values, value) { + isSpecialWords(values, value) { return validations.matchRegexp(values, value, /^[A-Z\s\u00C0-\u017F]+$/i); }, - isLength: function (values, value, length) { + isLength(values, value, length) { return !isExisty(value) || isEmpty(value) || value.length === length; }, - equals: function (values, value, eql) { - return !isExisty(value) || isEmpty(value) || value == eql; + equals(values, value, eql) { + return !isExisty(value) || isEmpty(value) || value === eql; }, - equalsField: function (values, value, field) { - return value == values[field]; + equalsField(values, value, field) { + return value === values[field]; }, - maxLength: function (values, value, length) { + maxLength(values, value, length) { return !isExisty(value) || value.length <= length; }, - minLength: function (values, value, length) { + minLength(values, value, length) { return !isExisty(value) || isEmpty(value) || value.length >= length; - } + }, }; -module.exports = validations; +export default validations; diff --git a/testrunner.js b/testrunner.js index 6936e57a..bd5be23d 100644 --- a/testrunner.js +++ b/testrunner.js @@ -1,22 +1,21 @@ -import path from 'path'; -import testrunner from 'nodeunit/lib/reporters/default.js'; -import {jsdom} from 'jsdom'; +import testrunner from 'nodeunit/lib/reporters/default'; +import { jsdom } from 'jsdom/lib/old-api'; global.document = jsdom(); -global.window = document.defaultView; +global.window = global.document.defaultView; global.navigator = global.window.navigator; testrunner.run(['tests'], { - "error_prefix": "\u001B[31m", - "error_suffix": "\u001B[39m", - "ok_prefix": "\u001B[32m", - "ok_suffix": "\u001B[39m", - "bold_prefix": "\u001B[1m", - "bold_suffix": "\u001B[22m", - "assertion_prefix": "\u001B[35m", - "assertion_suffix": "\u001B[39m" -}, function(err) { - if (err) { - process.exit(1); - } + error_prefix: '\u001B[31m', + error_suffix: '\u001B[39m', + ok_prefix: '\u001B[32m', + ok_suffix: '\u001B[39m', + bold_prefix: '\u001B[1m', + bold_suffix: '\u001B[22m', + assertion_prefix: '\u001B[35m', + assertion_suffix: '\u001B[39m', +}, (err) => { + if (err) { + process.exit(1); + } }); diff --git a/tests/Element-spec.js b/tests/Element-spec.js index 38b93acc..bf122bb2 100644 --- a/tests/Element-spec.js +++ b/tests/Element-spec.js @@ -1,9 +1,9 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import PureRenderMixin from 'react-addons-pure-render-mixin'; import sinon from 'sinon'; -import Formsy from './..'; +import Formsy, { withFormsy } from './..'; import TestInput, { InputFactory } from './utils/TestInput'; import immediate from './utils/immediate'; @@ -12,9 +12,9 @@ export default { 'should return passed and setValue() value when using getValue()': function (test) { const form = TestUtils.renderIntoDocument( - + - + ); const input = TestUtils.findRenderedDOMComponentWithTag(form, 'INPUT'); @@ -26,18 +26,45 @@ export default { }, + 'should only set the value and not validate when calling setValue(val, false)': function (test) { + + const Input = withFormsy(class TestInput extends React.Component { + updateValue = (event) => { + this.props.setValue(event.target.value, false); + } + render() { + return ; + } + }) + const form = TestUtils.renderIntoDocument( + + + + ); + const inputComponent = TestUtils.findRenderedComponentWithType(form, Input); + const setStateSpy = sinon.spy(inputComponent, 'setState'); + const inputElement = TestUtils.findRenderedDOMComponentWithTag(form, 'INPUT'); + + test.equal(setStateSpy.called, false); + TestUtils.Simulate.change(inputElement, {target: {value: 'foobar'}}); + test.equal(setStateSpy.calledOnce, true); + test.equal(setStateSpy.calledWithExactly({ value: 'foobar' }), true); + test.done(); + + }, + 'should set back to pristine value when running reset': function (test) { let reset = null; const Input = InputFactory({ - componentDidMount() { - reset = this.resetValue; + componentDidMount: function() { + reset = this.props.resetValue; } }); const form = TestUtils.renderIntoDocument( - + - + ); const input = TestUtils.findRenderedDOMComponentWithTag(form, 'INPUT'); @@ -53,14 +80,14 @@ export default { let getErrorMessage = null; const Input = InputFactory({ - componentDidMount() { - getErrorMessage = this.getErrorMessage; + componentDidMount: function() { + getErrorMessage = this.props.getErrorMessage; } }); TestUtils.renderIntoDocument( - + - + ); test.equal(getErrorMessage(), 'Has to be email'); @@ -73,14 +100,14 @@ export default { let isValid = null; const Input = InputFactory({ - componentDidMount() { - isValid = this.isValid; + componentDidMount: function() { + isValid = this.props.isValid; } }); const form = TestUtils.renderIntoDocument( - + - + ); test.equal(isValid(), false); @@ -96,16 +123,16 @@ export default { const isRequireds = []; const Input = InputFactory({ - componentDidMount() { - isRequireds.push(this.isRequired); + componentDidMount: function() { + isRequireds.push(this.props.isRequired); } }); TestUtils.renderIntoDocument( - + - + ); test.equal(isRequireds[0](), false); @@ -120,16 +147,16 @@ export default { const showRequireds = []; const Input = InputFactory({ - componentDidMount() { - showRequireds.push(this.showRequired); + componentDidMount: function() { + showRequireds.push(this.props.showRequired); } }); TestUtils.renderIntoDocument( - + - + ); test.equal(showRequireds[0](), false); @@ -144,14 +171,14 @@ export default { let isPristine = null; const Input = InputFactory({ - componentDidMount() { - isPristine = this.isPristine; + componentDidMount: function() { + isPristine = this.props.isPristine; } }); const form = TestUtils.renderIntoDocument( - + - + ); test.equal(isPristine(), true); @@ -165,23 +192,21 @@ export default { 'should allow an undefined value to be updated to a value': function (test) { - const TestForm = React.createClass({ - getInitialState() { - return {value: undefined}; - }, - changeValue() { + class TestForm extends React.Component { + state = {value: undefined}; + changeValue = () => { this.setState({ value: 'foo' }); - }, + } render() { return ( - - - + + + ); } - }); + } const form = TestUtils.renderIntoDocument(); form.changeValue(); @@ -195,15 +220,15 @@ export default { 'should be able to test a values validity': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const input = TestUtils.findRenderedComponentWithType(form, TestInput); @@ -215,17 +240,17 @@ export default { 'should be able to use an object as validations property': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const input = TestUtils.findRenderedComponentWithType(form, TestInput); @@ -238,17 +263,17 @@ export default { 'should be able to pass complex values to a validation rule': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const inputComponent = TestUtils.findRenderedComponentWithType(form, TestInput); @@ -263,26 +288,26 @@ export default { 'should be able to run a function to validate': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { customValidationA(values, value) { return value === 'foo'; - }, + } customValidationB(values, value) { return value === 'foo' && values.A === 'foo'; - }, + } render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const inputComponent = TestUtils.scryRenderedComponentsWithType(form, TestInput); @@ -299,17 +324,17 @@ export default { 'should not override error messages with error messages passed by form if passed eror messages is an empty object': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const inputComponent = TestUtils.findRenderedComponentWithType(form, TestInput); @@ -319,20 +344,19 @@ export default { }, - 'should override all error messages with error messages passed by form': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const inputComponent = TestUtils.findRenderedComponentWithType(form, TestInput); @@ -344,10 +368,10 @@ export default { 'should override validation rules with required rules': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const inputComponent = TestUtils.findRenderedComponentWithType(form, TestInput); @@ -374,26 +398,26 @@ export default { 'should fall back to default error message when non exist in validationErrors map': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const inputComponent = TestUtils.findRenderedComponentWithType(form, TestInput); - test.equal(inputComponent.getErrorMessage(), 'bar'); + test.equal(inputComponent.getErrorMessage(), 'bar1'); test.done(); @@ -401,17 +425,17 @@ export default { 'should not be valid if it is required and required rule is true': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const inputComponent = TestUtils.findRenderedComponentWithType(form, TestInput); @@ -423,22 +447,20 @@ export default { 'should handle objects and arrays as values': function (test) { - const TestForm = React.createClass({ - getInitialState() { - return { - foo: {foo: 'bar'}, - bar: ['foo'] - }; - }, + class TestForm extends React.Component { + state = { + foo: {foo: 'bar'}, + bar: ['foo'] + } render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); form.setState({ @@ -456,28 +478,24 @@ export default { 'should handle isFormDisabled with dynamic inputs': function (test) { - const TestForm = React.createClass({ - getInitialState() { - return { - bool: true - }; - }, - flip() { + class TestForm extends React.Component { + state = { bool: true } + flip = () => { this.setState({ bool: !this.state.bool }); - }, + } render() { return ( - + {this.state.bool ? : } - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const input = TestUtils.findRenderedComponentWithType(form, TestInput); @@ -491,19 +509,19 @@ export default { 'should allow for dot notation in name which maps to a deep object': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { onSubmit(model) { test.deepEqual(model, {foo: {bar: 'foo', test: 'test'}}); - }, + } render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); test.expect(1); @@ -517,19 +535,19 @@ export default { 'should allow for application/x-www-form-urlencoded syntax and convert to object': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { onSubmit(model) { test.deepEqual(model, {foo: ['foo', 'bar']}); - }, + } render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); test.expect(1); @@ -546,17 +564,17 @@ export default { var renderSpy = sinon.spy(); const Input = InputFactory({ - mixins: [Formsy.Mixin, PureRenderMixin], - render() { + shouldComponentUpdate: function() { return false }, + render: function() { renderSpy(); - return ; + return ; } }); const form = TestUtils.renderIntoDocument( - + - + ); test.equal(renderSpy.calledOnce, true); diff --git a/tests/Formsy-spec.js b/tests/Formsy-spec.js index a1cdc4bf..6fe49e50 100755 --- a/tests/Formsy-spec.js +++ b/tests/Formsy-spec.js @@ -1,26 +1,25 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; -import Formsy from './..'; +import Formsy, { addValidationRule } from './..'; import TestInput from './utils/TestInput'; import TestInputHoc from './utils/TestInputHoc'; import immediate from './utils/immediate'; import sinon from 'sinon'; export default { - 'Setting up a form': { 'should expose the users DOM node through an innerRef prop': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + { this.name = c; }} /> - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const input = form.name; @@ -31,7 +30,7 @@ export default { 'should render a form into the document': function (test) { - const form = TestUtils.renderIntoDocument(); + const form = TestUtils.renderIntoDocument(); test.equal(ReactDOM.findDOMNode(form).tagName, 'FORM'); test.done(); @@ -40,7 +39,7 @@ export default { 'should set a class name if passed': function (test) { - const form = TestUtils.renderIntoDocument( ); + const form = TestUtils.renderIntoDocument( ); test.equal(ReactDOM.findDOMNode(form).className, 'foo'); test.done(); @@ -50,18 +49,18 @@ export default { 'should allow for null/undefined children': function (test) { let model = null; - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - (model = formModel)}> + (model = formModel)}>

Test

{ null } { undefined } -
+ ); } - }); + } const form = TestUtils.renderIntoDocument(); immediate(() => { @@ -77,17 +76,17 @@ export default { const inputs = []; let forceUpdate = null; let model = null; - const TestForm = React.createClass({ + class TestForm extends React.Component { componentWillMount() { forceUpdate = this.forceUpdate.bind(this); - }, + } render() { return ( - (model = formModel)}> + (model = formModel)}> {inputs} - ); + ); } - }); + } const form = TestUtils.renderIntoDocument(); // Wait before adding the input @@ -113,17 +112,17 @@ export default { const inputs = []; let forceUpdate = null; let model = null; - const TestForm = React.createClass({ + class TestForm extends React.Component { componentWillMount() { forceUpdate = this.forceUpdate.bind(this); - }, + } render() { return ( - (model = formModel)}> + (model = formModel)}> {inputs} - ); + ); } - }); + } const form = TestUtils.renderIntoDocument(); // Wait before adding the input @@ -151,19 +150,19 @@ export default { let forceUpdate = null; let model = null; - const TestForm = React.createClass({ + class TestForm extends React.Component { componentWillMount() { forceUpdate = this.forceUpdate.bind(this); - }, + } render() { const input = ; return ( - (model = formModel)}> + (model = formModel)}> {input} - ); + ); } - }); + } let form = TestUtils.renderIntoDocument(); // Wait before changing the input @@ -193,13 +192,13 @@ export default { const runRule = sinon.spy(); const notRunRule = sinon.spy(); - Formsy.addValidationRule('runRule', runRule); - Formsy.addValidationRule('notRunRule', notRunRule); + addValidationRule('runRule', runRule); + addValidationRule('notRunRule', notRunRule); const form = TestUtils.renderIntoDocument( - + - + ); const input = TestUtils.findRenderedDOMComponentWithTag(form, 'input'); @@ -215,24 +214,24 @@ export default { const ruleA = sinon.spy(); const ruleB = sinon.spy(); - Formsy.addValidationRule('ruleA', ruleA); - Formsy.addValidationRule('ruleB', ruleB); + addValidationRule('ruleA', ruleA); + addValidationRule('ruleB', ruleB); class TestForm extends React.Component { constructor(props) { super(props); this.state = {rule: 'ruleA'}; } - changeRule() { + changeRule = () => { this.setState({ rule: 'ruleB' }); } render() { return ( - + - + ); } } @@ -256,14 +255,14 @@ export default { super(props); this.state = {showSecondInput: false}; } - addInput() { + addInput = () => { this.setState({ showSecondInput: true }); } render() { return ( - + { this.state.showSecondInput ? @@ -271,7 +270,7 @@ export default { : null } - + ); } } @@ -304,7 +303,7 @@ export default { } render() { return ( - + { this.state.showSecondInput ? @@ -312,7 +311,7 @@ export default { : null } - + ); } } @@ -334,13 +333,13 @@ export default { const ruleA = sinon.spy(); const ruleB = sinon.spy(); - Formsy.addValidationRule('ruleA', ruleA); - Formsy.addValidationRule('ruleB', ruleB); + addValidationRule('ruleA', ruleA); + addValidationRule('ruleB', ruleB); const form = TestUtils.renderIntoDocument( - + - + ); const input = TestUtils.findRenderedDOMComponentWithTag(form, 'input'); @@ -357,11 +356,11 @@ export default { const hasChanged = sinon.spy(); - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { - return ; + return ; } - }); + } TestUtils.renderIntoDocument(); test.equal(hasChanged.called, false); test.done(); @@ -372,9 +371,9 @@ export default { const hasChanged = sinon.spy(); const form = TestUtils.renderIntoDocument( - + - + ); TestUtils.Simulate.change(TestUtils.findRenderedDOMComponentWithTag(form, 'INPUT'), {target: {value: 'bar'}}); test.equal(hasChanged.calledOnce, true); @@ -385,29 +384,27 @@ export default { 'should trigger onChange once when new input is added to form': function (test) { const hasChanged = sinon.spy(); - const TestForm = React.createClass({ - getInitialState() { - return { - showInput: false - }; - }, + class TestForm extends React.Component { + state = { + showInput: false + } addInput() { this.setState({ showInput: true }) - }, + } render() { return ( - + { this.state.showInput ? : null } - ); + ); } - }); + } const form = TestUtils.renderIntoDocument(); form.addInput(); @@ -422,16 +419,16 @@ export default { 'should allow elements to check if the form is disabled': function (test) { - const TestForm = React.createClass({ - getInitialState() { return { disabled: true }; }, - enableForm() { this.setState({ disabled: false }); }, + class TestForm extends React.Component { + state = { disabled: true }; + enableForm() { this.setState({ disabled: false }); } render() { return ( - + - ); + ); } - }); + } const form = TestUtils.renderIntoDocument(); const input = TestUtils.findRenderedComponentWithType(form, TestInput); @@ -447,18 +444,18 @@ export default { 'should be possible to pass error state of elements by changing an errors attribute': function (test) { - const TestForm = React.createClass({ - getInitialState() { return { validationErrors: { foo: 'bar' } }; }, - onChange(values) { + class TestForm extends React.Component { + state = { validationErrors: { foo: 'bar' } }; + onChange = (values) => { this.setState(values.foo ? { validationErrors: {} } : { validationErrors: {foo: 'bar'} }); - }, + } render() { return ( - + - ); + ); } - }); + } const form = TestUtils.renderIntoDocument(); // Wait for update @@ -479,14 +476,14 @@ export default { 'should trigger an onValidSubmit when submitting a valid form': function (test) { let isCalled = sinon.spy(); - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - ); + ); } - }); + } const form = TestUtils.renderIntoDocument(); const FoundForm = TestUtils.findRenderedComponentWithType(form, TestForm); TestUtils.Simulate.submit(ReactDOM.findDOMNode(FoundForm)); @@ -498,14 +495,14 @@ export default { 'should trigger an onInvalidSubmit when submitting an invalid form': function (test) { let isCalled = sinon.spy(); - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - ); + ); } - }); + } const form = TestUtils.renderIntoDocument(); const FoundForm = TestUtils.findRenderedComponentWithType(form, TestForm); @@ -523,16 +520,16 @@ export default { 'should call onSubmit correctly': function (test) { const onSubmit = sinon.spy(); - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); TestUtils.Simulate.submit(ReactDOM.findDOMNode(form)); @@ -544,26 +541,24 @@ export default { 'should allow dynamic changes to false': function (test) { const onSubmit = sinon.spy(); - const TestForm = React.createClass({ - getInitialState() { - return { - value: true - }; - }, + class TestForm extends React.Component { + state = { + value: true + } changeValue() { this.setState({ value: false }); - }, + } render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); form.changeValue(); @@ -575,16 +570,16 @@ export default { 'should say the form is submitted': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const input = TestUtils.findRenderedComponentWithType(form, TestInput); test.equal(input.isFormSubmitted(), false); @@ -596,29 +591,27 @@ export default { 'should be able to reset the form to its pristine state': function (test) { - const TestForm = React.createClass({ - getInitialState() { - return { - value: true - }; - }, + class TestForm extends React.Component { + state = { + value: true + } changeValue() { this.setState({ value: false }); - }, + } render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const input = TestUtils.findRenderedComponentWithType(form, TestInput); - const formsyForm = TestUtils.findRenderedComponentWithType(form, Formsy.Form); + const formsyForm = TestUtils.findRenderedComponentWithType(form, Formsy); test.equal(input.getValue(), true); form.changeValue(); test.equal(input.getValue(), false); @@ -631,29 +624,27 @@ export default { 'should be able to reset the form using custom data': function (test) { - const TestForm = React.createClass({ - getInitialState() { - return { - value: true - }; - }, + class TestForm extends React.Component { + state = { + value: true + } changeValue() { this.setState({ value: false }); - }, + } render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const input = TestUtils.findRenderedComponentWithType(form, TestInput); - const formsyForm = TestUtils.findRenderedComponentWithType(form, Formsy.Form); + const formsyForm = TestUtils.findRenderedComponentWithType(form, Formsy); test.equal(input.getValue(), true); form.changeValue(); @@ -670,19 +661,19 @@ export default { 'should be able to reset the form to empty values': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - + - + ); } - }); + } const form = TestUtils.renderIntoDocument(); const input = TestUtils.findRenderedComponentWithType(form, TestInput); - const formsyForm = TestUtils.findRenderedComponentWithType(form, Formsy.Form); + const formsyForm = TestUtils.findRenderedComponentWithType(form, Formsy); formsyForm.reset({ foo: '' @@ -698,9 +689,9 @@ export default { const hasOnChanged = sinon.spy(); const form = TestUtils.renderIntoDocument( - + - + ); test.equal(form.isChanged(), false); test.equal(hasOnChanged.called, false); @@ -712,9 +703,9 @@ export default { const hasOnChanged = sinon.spy(); const form = TestUtils.renderIntoDocument( - + - + ); const input = TestUtils.findRenderedDOMComponentWithTag(form, 'input'); TestUtils.Simulate.change(ReactDOM.findDOMNode(input), {target: {value: 'bar'}}); @@ -728,9 +719,9 @@ export default { const hasOnChanged = sinon.spy(); const form = TestUtils.renderIntoDocument( - + - + ); const input = TestUtils.findRenderedDOMComponentWithTag(form, 'input'); TestUtils.Simulate.change(ReactDOM.findDOMNode(input), {target: {value: 'bar'}}); diff --git a/tests/Rules-equals-spec.js b/tests/Rules-equals-spec.js index dc13ad0c..673a3346 100644 --- a/tests/Rules-equals-spec.js +++ b/tests/Rules-equals-spec.js @@ -1,25 +1,25 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import immediate from './utils/immediate'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ - render() { - return ; + render: function() { + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-isAlpha-spec.js b/tests/Rules-isAlpha-spec.js index cfbec5f0..f3b4e9c4 100644 --- a/tests/Rules-isAlpha-spec.js +++ b/tests/Rules-isAlpha-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ - render() { - return ; + render: function() { + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-isAlphanumeric-spec.js b/tests/Rules-isAlphanumeric-spec.js index 5ae5e402..8fa7c248 100644 --- a/tests/Rules-isAlphanumeric-spec.js +++ b/tests/Rules-isAlphanumeric-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ render() { - return ; + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-isEmail-spec.js b/tests/Rules-isEmail-spec.js index 4696e2ac..92d902ae 100644 --- a/tests/Rules-isEmail-spec.js +++ b/tests/Rules-isEmail-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ render() { - return ; + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-isEmptyString-spec.js b/tests/Rules-isEmptyString-spec.js index a14683fb..95994357 100644 --- a/tests/Rules-isEmptyString-spec.js +++ b/tests/Rules-isEmptyString-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ render() { - return ; + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-isExisty-spec.js b/tests/Rules-isExisty-spec.js index 76ea729d..086294e6 100644 --- a/tests/Rules-isExisty-spec.js +++ b/tests/Rules-isExisty-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ render() { - return ; + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-isFloat-spec.js b/tests/Rules-isFloat-spec.js index 847c1f70..3c6b01c6 100644 --- a/tests/Rules-isFloat-spec.js +++ b/tests/Rules-isFloat-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ render() { - return ; + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-isInt-spec.js b/tests/Rules-isInt-spec.js index 84cbac76..28261e89 100644 --- a/tests/Rules-isInt-spec.js +++ b/tests/Rules-isInt-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ render() { - return ; + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-isLength-spec.js b/tests/Rules-isLength-spec.js index 74ae2efb..85a3fd2d 100644 --- a/tests/Rules-isLength-spec.js +++ b/tests/Rules-isLength-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ render() { - return ; + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-isNumeric-spec.js b/tests/Rules-isNumeric-spec.js index 87b15376..67928e26 100644 --- a/tests/Rules-isNumeric-spec.js +++ b/tests/Rules-isNumeric-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ render() { - return ; + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-isUrl-spec.js b/tests/Rules-isUrl-spec.js index 0392fadb..86ae30fb 100644 --- a/tests/Rules-isUrl-spec.js +++ b/tests/Rules-isUrl-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ render() { - return ; + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-isWords-spec.js b/tests/Rules-isWords-spec.js index f10a80c8..5cc390f5 100644 --- a/tests/Rules-isWords-spec.js +++ b/tests/Rules-isWords-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ render() { - return ; + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-maxLength-spec.js b/tests/Rules-maxLength-spec.js index 61f52798..980cb727 100644 --- a/tests/Rules-maxLength-spec.js +++ b/tests/Rules-maxLength-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ render() { - return ; + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Rules-minLength-spec.js b/tests/Rules-minLength-spec.js index 4dd7bd6b..00b16d27 100644 --- a/tests/Rules-minLength-spec.js +++ b/tests/Rules-minLength-spec.js @@ -1,24 +1,24 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import Formsy from './..'; import { InputFactory } from './utils/TestInput'; const TestInput = InputFactory({ render() { - return ; + return ; } }); -const TestForm = React.createClass({ +class TestForm extends React.Component { render() { return ( - + - + ); } -}); +} export default { diff --git a/tests/Validation-spec.js b/tests/Validation-spec.js index 211c4b5c..c3e71805 100644 --- a/tests/Validation-spec.js +++ b/tests/Validation-spec.js @@ -1,24 +1,37 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; -import Formsy from './..'; -import TestInput, {InputFactory} from './utils/TestInput'; +import Formsy, { withFormsy } from './..'; +import { InputFactory } from './utils/TestInput'; import immediate from './utils/immediate'; import sinon from 'sinon'; +class MyTest extends React.Component { + static defaultProps = { type: 'text' }; + + handleChange = (event) => { + this.props.setValue(event.target.value); + } + + render() { + return ; + } +} +const FormsyTest = withFormsy(MyTest); + export default { 'should reset only changed form element when external error is passed': function (test) { const form = TestUtils.renderIntoDocument( - invalidate({ foo: 'bar', bar: 'foo' })}> - - - + invalidate({ foo: 'bar', bar: 'foo' })}> + + + ); const input = TestUtils.scryRenderedDOMComponentsWithTag(form, 'INPUT')[0]; - const inputComponents = TestUtils.scryRenderedComponentsWithType(form, TestInput); + const inputComponents = TestUtils.scryRenderedComponentsWithType(form, FormsyTest); form.submit(); test.equal(inputComponents[0].isValid(), false); @@ -36,13 +49,13 @@ export default { 'should let normal validation take over when component with external error is changed': function (test) { const form = TestUtils.renderIntoDocument( - invalidate({ foo: 'bar' })}> - - + invalidate({ foo: 'bar' })}> + + ); const input = TestUtils.findRenderedDOMComponentWithTag(form, 'INPUT'); - const inputComponent = TestUtils.findRenderedComponentWithType(form, TestInput); + const inputComponent = TestUtils.findRenderedComponentWithType(form, FormsyTest); form.submit(); test.equal(inputComponent.isValid(), false); @@ -62,9 +75,9 @@ export default { const onInvalid = sinon.spy(); TestUtils.renderIntoDocument( - - - + + + ); test.equal(onValid.called, true); @@ -79,9 +92,9 @@ export default { const onInvalid = sinon.spy(); TestUtils.renderIntoDocument( - - - + + + ); test.equal(onValid.called, false); @@ -94,14 +107,14 @@ export default { let isValid = false; const CustomInput = InputFactory({ - componentDidMount() { - isValid = this.isValid(); + componentDidMount: function() { + isValid = this.props.isValid(); } }); const form = TestUtils.renderIntoDocument( - + - + ); const input = TestUtils.findRenderedDOMComponentWithTag(form, 'INPUT'); @@ -110,22 +123,22 @@ export default { }, - 'should provide invalidate callback on onValiSubmit': function (test) { + 'should provide invalidate callback on onValidSubmit': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - invalidate({ foo: 'bar' })}> - - + invalidate({ foo: 'bar' })}> + + ); } - }); + } const form = TestUtils.renderIntoDocument(); const formEl = TestUtils.findRenderedDOMComponentWithTag(form, 'form'); - const input = TestUtils.findRenderedComponentWithType(form, TestInput); + const input = TestUtils.findRenderedComponentWithType(form, FormsyTest); TestUtils.Simulate.submit(formEl); test.equal(input.isValid(), false); test.done(); @@ -134,19 +147,19 @@ export default { 'should provide invalidate callback on onInvalidSubmit': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - invalidate({ foo: 'bar' })}> - - + invalidate({ foo: 'bar' })}> + + ); } - }); + } const form = TestUtils.renderIntoDocument(); const formEl = TestUtils.findRenderedDOMComponentWithTag(form, 'form'); - const input = TestUtils.findRenderedComponentWithType(form, TestInput); + const input = TestUtils.findRenderedComponentWithType(form, FormsyTest); TestUtils.Simulate.submit(formEl); test.equal(input.getErrorMessage(), 'bar'); @@ -156,21 +169,21 @@ export default { 'should not invalidate inputs on external errors with preventExternalInvalidation prop': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - invalidate({ foo: 'bar' })}> - - + + ); } - }); + } const form = TestUtils.renderIntoDocument(); const formEl = TestUtils.findRenderedDOMComponentWithTag(form, 'form'); - const input = TestUtils.findRenderedComponentWithType(form, TestInput); + const input = TestUtils.findRenderedComponentWithType(form, FormsyTest); TestUtils.Simulate.submit(formEl); test.equal(input.isValid(), true); test.done(); @@ -179,19 +192,19 @@ export default { 'should invalidate inputs on external errors without preventExternalInvalidation prop': function (test) { - const TestForm = React.createClass({ + class TestForm extends React.Component { render() { return ( - invalidate({ foo: 'bar' })}> - - + invalidate({ foo: 'bar' })}> + + ); } - }); + } const form = TestUtils.renderIntoDocument(); const formEl = TestUtils.findRenderedDOMComponentWithTag(form, 'form'); - const input = TestUtils.findRenderedComponentWithType(form, TestInput); + const input = TestUtils.findRenderedComponentWithType(form, FormsyTest); TestUtils.Simulate.submit(formEl); test.equal(input.isValid(), false); test.done(); diff --git a/tests/utils/TestInput.js b/tests/utils/TestInput.js index d9a57ece..50e43bee 100644 --- a/tests/utils/TestInput.js +++ b/tests/utils/TestInput.js @@ -1,21 +1,25 @@ import React from 'react'; -import Formsy from './../..'; +import Formsy, { withFormsy } from './../..'; -const defaultProps = { - mixins: [Formsy.Mixin], - getDefaultProps() { - return { type: 'text' }; - }, - updateValue(event) { - this.setValue(event.target[this.props.type === 'checkbox' ? 'checked' : 'value']); - }, - render() { - return ; - } -}; +class TestInput extends React.Component { + static defaultProps = { type: 'text' }; -export function InputFactory(props) { - return React.createClass(Object.assign(defaultProps, props)); + updateValue = (event) => { + this.props.setValue(event.target[this.props.type === 'checkbox' ? 'checked' : 'value']); + } + + render() { + return ; + } +} + +export function InputFactory(methods) { + for (let method in methods) { + if (methods.hasOwnProperty(method)) { + TestInput.prototype[method] = methods[method]; + } + } + return withFormsy(TestInput); } -export default React.createClass(defaultProps); +export default withFormsy(TestInput); diff --git a/tests/utils/TestInputHoc.js b/tests/utils/TestInputHoc.js index 085be8f5..237b7879 100644 --- a/tests/utils/TestInputHoc.js +++ b/tests/utils/TestInputHoc.js @@ -1,13 +1,14 @@ import React from 'react'; -import { HOC as formsyHoc } from './../..'; +import Formsy, { withFormsy } from './../..'; -const defaultProps = { - methodOnWrappedInstance(param) { - return param; - }, - render() { - return (); - }, -}; +class TestComponent extends React.Component { + methodOnWrappedInstance = (param) => { + return param; + } -export default formsyHoc(React.createClass(defaultProps)); + render() { + return (); + } +} + +export default withFormsy(TestComponent); diff --git a/tests/utils/immediate.js b/tests/utils/immediate.js index ed311ae3..3e2c5ab0 100644 --- a/tests/utils/immediate.js +++ b/tests/utils/immediate.js @@ -1,3 +1,3 @@ export default function (fn) { - setTimeout(fn, 0); + setTimeout(fn, 0); } diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000..cada364a --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,20 @@ +const path = require('path'); + +module.exports = { + devtool: 'source-map', + entry: path.resolve(__dirname, 'src', 'index.js'), + externals: 'react', + output: { + path: path.resolve(__dirname, 'release'), + filename: 'formsy-react.js', + libraryTarget: 'umd', + library: 'Formsy', + }, + module: { + loaders: [{ + test: /\.jsx?$/, + exclude: /node_modules/, + loader: 'babel-loader', + }], + }, +}; diff --git a/webpack.production.config.js b/webpack.production.config.js deleted file mode 100644 index 4826ea84..00000000 --- a/webpack.production.config.js +++ /dev/null @@ -1,21 +0,0 @@ -var path = require('path'); - -module.exports = { - - devtool: 'source-map', - entry: path.resolve(__dirname, 'src', 'main.js'), - externals: 'react', - output: { - path: path.resolve(__dirname, 'release'), - filename: 'formsy-react.js', - libraryTarget: 'umd', - library: 'Formsy' - }, - module: { - loaders: [ - { test: /\.js$/, exclude: /node_modules/, loader: 'babel' }, - { test: /\.json$/, loader: 'json' } - ] - } - -}; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..ca9dd8f7 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5063 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/node@^6.0.46": + version "6.0.85" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.85.tgz#ec02bfe54a61044f2be44f13b389c6a0e8ee05ae" + +abab@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + +abbrev@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" + +accepts@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + dependencies: + acorn "^4.0.3" + +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.3, acorn@^4.0.4: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +acorn@^5.0.0, acorn@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75" + +ajv-keywords@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" + +ajv-keywords@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0" + +ajv@^4.7.0, ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^5.1.5, ajv@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.2.tgz#47c68d69e86f5d953103b0074a9430dc63da5e39" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + json-schema-traverse "^0.3.0" + json-stable-stringify "^1.0.1" + +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" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +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.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + +aproba@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + +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" + dependencies: + sprintf-js "~1.0.2" + +aria-query@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24" + dependencies: + ast-types-flow "0.0.7" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-flatten@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" + +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1.js@^4.0.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +ast-types-flow@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + +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, async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +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: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +axobject-query@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" + dependencies: + ast-types-flow "0.0.7" + +babel-cli@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.24.1.tgz#207cd705bba61489b2ea41b5312341cf6aca2283" + dependencies: + babel-core "^6.24.1" + babel-polyfill "^6.23.0" + babel-register "^6.24.1" + babel-runtime "^6.22.0" + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.0.0" + glob "^7.0.0" + lodash "^4.2.0" + output-file-sync "^1.1.0" + path-is-absolute "^1.0.0" + slash "^1.0.0" + source-map "^0.5.0" + v8flags "^2.0.10" + optionalDependencies: + chokidar "^1.6.1" + +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" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.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" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.25.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" + slash "^1.0.0" + source-map "^0.5.0" + +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" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.25.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-builder-react-jsx@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.24.1.tgz#0ad7917e33c8d751e646daca4e77cc19377d2cbc" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + esutils "^2.0.0" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + lodash "^4.2.0" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + lodash "^4.2.0" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-loader@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.1.tgz#b87134c8b12e3e4c2a94e0546085bc680a2b8488" + dependencies: + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-flow@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + +babel-plugin-syntax-object-rest-spread@^6.8.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-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + lodash "^4.2.0" + +babel-plugin-transform-es2015-classes@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +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" + 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-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-display-name@^6.23.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-self@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-source@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + dependencies: + babel-helper-builder-react-jsx "^6.24.1" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" + dependencies: + regenerator-transform "0.9.11" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-polyfill@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" + dependencies: + babel-runtime "^6.22.0" + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-preset-es2015@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +babel-preset-flow@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + dependencies: + babel-plugin-transform-flow-strip-types "^6.22.0" + +babel-preset-react@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + dependencies: + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-react-display-name "^6.23.0" + babel-plugin-transform-react-jsx "^6.24.1" + babel-plugin-transform-react-jsx-self "^6.22.0" + babel-plugin-transform-react-jsx-source "^6.22.0" + babel-preset-flow "^6.23.0" + +babel-preset-stage-2@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" + dependencies: + babel-core "^6.24.1" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.25.0.tgz#33b98eaa5d482bb01a8d1aa6b437ad2b01aec41c" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.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" + 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-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" + dependencies: + babel-code-frame "^6.22.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-types@^6.18.0, babel-types@^6.19.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" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.17.2, babylon@^6.17.4: + version "6.17.4" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-js@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +big.js@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" + +binary-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.9.0.tgz#66506c16ce6f4d6928a5b3cd6a33ca41e941e37b" + +bind-obj-methods@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bind-obj-methods/-/bind-obj-methods-1.0.0.tgz#4f5979cac15793adf70e488161e463e209ca509c" + +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" + +bluebird@^3.3.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + dependencies: + buffer-xor "^1.0.2" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + inherits "^2.0.1" + +browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + +buffer-indexof@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.0.tgz#f54f647c4f4e25228baa656a2e57e43d5f270982" + +buffer-xor@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0, builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +bytes@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.5.0.tgz#4c9423ea2d252c270c41b2bdefeff9bb6b62c06a" + +caching-transform@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1" + dependencies: + md5-hex "^1.2.0" + mkdirp "^0.5.1" + write-file-atomic "^1.1.4" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.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: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + 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" + +chokidar@^1.6.0, chokidar@^1.6.1, chokidar@^1.7.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" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + +clean-yaml-object@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-support@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +commander@^2.8.1, commander@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +compressible@~2.0.10: + version "2.0.11" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.11.tgz#16718a75de283ed8e604041625a2064586797d8a" + dependencies: + mime-db ">= 1.29.0 < 2" + +compression@^1.5.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.0.tgz#030c9f198f1643a057d776a738e922da4373012d" + dependencies: + accepts "~1.3.3" + bytes "2.5.0" + compressible "~2.0.10" + debug "2.6.8" + on-headers "~1.0.1" + safe-buffer "5.1.1" + vary "~1.1.1" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +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" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +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" + +content-type@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + +convert-source-map@^1.1.0, convert-source-map@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +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.5.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +coveralls@^2.11.2: + version "2.13.1" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.1.tgz#d70bb9acc1835ec4f063ff9dac5423c17b11f178" + dependencies: + js-yaml "3.6.1" + lcov-parse "0.0.10" + log-driver "1.2.5" + minimist "1.2.0" + request "2.79.0" + +create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^2.0.0" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +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" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +cross-spawn@^4: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +crypto-browserify@^3.11.0: + version "3.11.1" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.1.tgz#948945efc6757a400d6e5e5af47194d10064279f" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +damerau-levenshtein@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +debug-log@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" + +debug@2.6.8, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.6.3, debug@^2.6.6, debug@^2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +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" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +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" + +depd@1.1.1, depd@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +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-node@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" + +diff@^1.3.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" + +diff@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" + +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + +dns-packet@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.2.0.tgz#ee98421cfdea017fa98e730c4ffd3ca513599297" + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + +domain-browser@^1.1.1: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +ejs@^2.5.2: + version "2.5.7" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" + +elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^6.1.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + +errno@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.0.tgz#3b00385e85729932beffa9163bbea1234e932914" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.0" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.27" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.27.tgz#bf926b058c62b1cb5de1a887930673b6aa6d9a66" + dependencies: + es6-iterator "2" + es6-symbol "~3.1" + +es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-symbol "^3.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: + version "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" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-config-airbnb-base@^11.3.0: + version "11.3.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.1.tgz#c0ab108c9beed503cb999e4c60f4ef98eda0ed30" + dependencies: + eslint-restricted-globals "^0.1.1" + +eslint-config-airbnb@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz#fd432965a906e30139001ba830f58f73aeddae8e" + dependencies: + eslint-config-airbnb-base "^11.3.0" + +eslint-import-resolver-node@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" + dependencies: + debug "^2.6.8" + resolve "^1.2.0" + +eslint-module-utils@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" + dependencies: + debug "^2.6.8" + pkg-dir "^1.0.0" + +eslint-plugin-import@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.7.0.tgz#21de33380b9efb55f5ef6d2e210ec0e07e7fa69f" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.6.8" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.1" + eslint-module-utils "^2.1.1" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + read-pkg-up "^2.0.0" + +eslint-plugin-jsx-a11y@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1" + dependencies: + aria-query "^0.7.0" + array-includes "^3.0.3" + ast-types-flow "0.0.7" + axobject-query "^0.1.0" + damerau-levenshtein "^1.0.0" + emoji-regex "^6.1.0" + jsx-ast-utils "^1.4.0" + +eslint-plugin-react@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.2.0.tgz#25c77a4ec307e3eebb248ea3350960e372ab6406" + dependencies: + doctrine "^2.0.0" + has "^1.0.1" + jsx-ast-utils "^2.0.0" + +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + +eslint-scope@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +"eslint@^3.19.0 || ^4.3.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.4.1.tgz#99cd7eafcffca2ff99a5c8f5f2a474d6364b4bd3" + dependencies: + ajv "^5.2.0" + babel-code-frame "^6.22.0" + chalk "^1.1.3" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^2.6.8" + doctrine "^2.0.0" + eslint-scope "^3.7.1" + espree "^3.5.0" + esquery "^1.0.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^9.17.0" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^4.0.0" + progress "^2.0.0" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-json-comments "~2.0.1" + table "^4.0.1" + text-table "~0.2.0" + +espree@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.0.tgz#98358625bdd055861ea27e2867ea729faf463d8d" + dependencies: + acorn "^5.1.1" + acorn-jsx "^3.0.0" + +esprima@^2.6.0, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + dependencies: + estraverse "^4.1.0" + object-assign "^4.0.1" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + +events-to-array@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/events-to-array/-/events-to-array-1.1.2.tgz#2d41f563e1fe400ed4962fe1a4d5c6a7539df7f6" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + +evp_bytestokey@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" + dependencies: + create-hash "^1.1.1" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +express@^4.13.3: + version "4.15.4" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.4.tgz#032e2253489cf8fce02666beca3d11ed7a2daed1" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.2" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.8" + depd "~1.1.1" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + finalhandler "~1.0.4" + fresh "0.5.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.5" + qs "6.5.0" + range-parser "~1.2.0" + send "0.15.4" + serve-static "1.12.4" + setprototypeof "1.0.3" + statuses "~1.3.1" + type-is "~1.6.15" + utils-merge "1.0.0" + vary "~1.1.1" + +extend@~3.0.0: + 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" + dependencies: + iconv-lite "^0.4.17" + jschardet "^1.4.2" + tmp "^0.0.31" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +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-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + +fbjs@^0.8.4, fbjs@^0.8.9: + version "0.8.14" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.14.tgz#d1dbe2be254c35a91e09f31f9cd50a40b2a0ed1c" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +finalhandler@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.4.tgz#18574f2e7c4b98b8ae3b230c21f201f31bdb3fb7" + dependencies: + debug "2.6.8" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +flat-cache@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +foreground-child@^1.3.3, foreground-child@^1.5.3, foreground-child@^1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" + dependencies: + cross-spawn "^4" + signal-exit "^3.0.0" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data-to-object@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/form-data-to-object/-/form-data-to-object-0.2.0.tgz#f7a8e68ddd910a1100a65e25ac6a484143ff8168" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +formatio@1.2.0, formatio@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.2.0.tgz#f3b2167d9068c4698a8d51f4f760a39a54d818eb" + dependencies: + samsam "1.x" + +forwarded@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" + +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" + +fs-exists-cached@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz#cf25554ca050dc49ae6656b41de42258989dcbce" + +fs-readdir-recursive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.36" + +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: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + +function-loop@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/function-loop/-/function-loop-1.0.1.tgz#8076bb305e8e6a3cceee2920765f330d190f340c" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + +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" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.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" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + dependencies: + min-document "^2.19.0" + process "~0.5.1" + +globals@^9.0.0, globals@^9.17.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +handle-thing@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" + +handlebars@^4.0.3: + version "4.0.10" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +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" + +hash-base@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + dependencies: + inherits "^2.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +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" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +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" + dependencies: + whatwg-encoding "^1.0.1" + +html-entities@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + +http-errors@~1.6.1, http-errors@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-proxy-middleware@~0.17.4: + version "0.17.4" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" + dependencies: + http-proxy "^1.16.2" + is-glob "^3.1.0" + lodash "^4.17.2" + micromatch "^2.3.11" + +http-proxy@^1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + +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.17, iconv-lite@~0.4.13: + version "0.4.18" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +ignore@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" + +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" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +inquirer@^3.0.6: + version "3.2.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.1.tgz#06ceb0f540f45ca548c17d6840959878265fa175" + dependencies: + ansi-escapes "^2.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +internal-ip@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" + dependencies: + meow "^3.3.0" + +interpret@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" + +invariant@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + +ipaddr.js@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.4.0.tgz#296aca878a821816e5b85d0a285a99bcff4582f0" + +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" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-my-json-valid@^2.12.4: + version "2.16.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-resolvable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" + dependencies: + tryit "^1.0.1" + +is-stream@^1.0.1, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +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" + dependencies: + append-transform "^0.4.0" + +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" + 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" + 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" + 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.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" + dependencies: + debug "^2.6.3" + 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" + dependencies: + handlebars "^4.0.3" + +js-tokens@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +js-yaml@^3.2.7, js-yaml@^3.3.1, js-yaml@^3.9.1: + version "3.9.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +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@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.1.0.tgz#6c48d7a48ffc5c300283c312904d15da8360509b" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher "^1.4.1" + parse5 "^3.0.2" + pn "^1.0.0" + request "^2.79.0" + request-promise-native "^1.0.3" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^6.1.0" + xml-name-validator "^2.0.1" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-loader@^0.5.4: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + +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" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +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" + +json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jsx-ast-utils@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" + +jsx-ast-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.0.tgz#ec06a3d60cf307e5e119dac7bad81e89f096f0f8" + dependencies: + array-includes "^3.0.3" + +just-extend@^1.1.22: + version "1.1.22" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-1.1.22.tgz#3330af756cab6a542700c64b2e4e4aa062d52fff" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +lcov-parse@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + +loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.cond@^4.3.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +log-driver@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" + +loglevel@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.4.1.tgz#95b383f91a3c2756fd4ab093667e4309161f2bcd" + +lolex@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.6.0.tgz#3a9a0283452a47d7439e72731b9e07d7386e49f6" + +lolex@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.1.2.tgz#2694b953c9ea4d013e5b8bfba891c991025b2629" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978" + dependencies: + pify "^2.3.0" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +md5-hex@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4" + dependencies: + md5-o-matic "^0.1.1" + +md5-o-matic@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +merge-source-map@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" + dependencies: + source-map "^0.5.6" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +miller-rabin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +"mime-db@>= 1.29.0 < 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-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: + version "2.1.16" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" + dependencies: + mime-db "~1.29.0" + +mime@1.3.4, mime@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + dependencies: + dom-walk "^0.1.0" + +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@1.2.0, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + +multicast-dns@^6.0.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.1.1.tgz#6e7de86a570872ab17058adea7160bbeca814dde" + dependencies: + dns-packet "^1.0.1" + thunky "^0.1.0" + +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.6.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" + +native-promise-only@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +nise@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.0.1.tgz#0da92b10a854e97c0f496f6c2845a301280b3eef" + dependencies: + formatio "^1.2.0" + just-extend "^1.1.22" + lolex "^1.6.0" + path-to-regexp "^1.7.0" + +node-fetch@^1.0.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.2.tgz#c54e9aac57e432875233525f3c891c4159ffefd7" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-forge@0.6.33: + version "0.6.33" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc" + +node-libs-browser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.1.4" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "0.0.1" + os-browserify "^0.2.0" + path-browserify "0.0.0" + process "^0.11.0" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.0.5" + stream-browserify "^2.0.1" + stream-http "^2.3.1" + string_decoder "^0.10.25" + timers-browserify "^2.0.2" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-pre-gyp@^0.6.36: + version "0.6.36" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" + dependencies: + 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" + +nodeunit@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/nodeunit/-/nodeunit-0.11.1.tgz#23d80fd78b43d6c24ee1e4b64600d1579176195c" + dependencies: + ejs "^2.5.2" + tap "^10.0.2" + +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, normalize-package-data@^2.3.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +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" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +nwmatcher@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.1.tgz#7ae9b07b0ea804db7e25f05cb5fe4097d4e4949f" + +nyc@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-11.1.0.tgz#d6b3c5e16892a25af63138ba484676aa8a22eda7" + dependencies: + archy "^1.0.0" + arrify "^1.0.1" + caching-transform "^1.0.0" + convert-source-map "^1.3.0" + debug-log "^1.0.1" + default-require-extensions "^1.0.0" + find-cache-dir "^0.1.1" + find-up "^2.1.0" + foreground-child "^1.5.3" + glob "^7.0.6" + 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" + md5-hex "^1.2.0" + merge-source-map "^1.0.2" + micromatch "^2.3.11" + mkdirp "^0.5.0" + resolve-from "^2.0.0" + rimraf "^2.5.4" + signal-exit "^3.0.1" + spawn-wrap "^1.3.8" + test-exclude "^4.1.1" + yargs "^8.0.1" + yargs-parser "^5.0.0" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +obuf@^1.0.0, obuf@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +opener@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" + +opn@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1, optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +original@>=0.0.5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" + dependencies: + url-parse "1.0.x" + +os-browserify@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" + +os-homedir@^1.0.0, os-homedir@^1.0.1, os-homedir@^1.0.2: + 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" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: + 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" + +output-file-sync@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" + +own-or-env@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/own-or-env/-/own-or-env-1.0.0.tgz#9ef920fc81e2e63cf59d41101258368cf4fca4fb" + +own-or@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/own-or/-/own-or-1.0.0.tgz#4e877fbeda9a2ec8000fbc0bcae39645ee8bf8dc" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + 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" + +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +parse-asn1@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse5@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.2.tgz#05eff57f0ef4577fb144a79f8b9a967a6cc44510" + dependencies: + "@types/node" "^6.0.46" + +parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +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: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +path-to-regexp@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + dependencies: + isarray "0.0.1" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + +pbkdf2@^3.0.3: + version "3.0.13" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.13.tgz#c37d295531e786b1da3e3eadc840426accb0ae25" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +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: + 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" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +pluralize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762" + +pn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.0.0.tgz#1cf5a30b0d806cd18f88fc41a6b5d4ad615b3ba9" + +portfinder@^1.0.9: + version "1.0.13" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +private@^0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process@^0.11.0: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + 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" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + +proxy-addr@~1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.5.tgz#71c0ee3b102de3f202f3b64f608d173fcba1a918" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.4.0" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.2.4, punycode@^1.3.2, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +qs@6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49" + +qs@~6.3.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +querystringify@0.0.x: + version "0.0.4" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" + +querystringify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +randombytes@^2.0.0, randombytes@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.0.3, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +rc@^1.1.7: + version "1.2.1" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-addons-pure-render-mixin@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/react-addons-pure-render-mixin/-/react-addons-pure-render-mixin-15.6.0.tgz#84ba028630cdf89239d16f1bb4d98fe865651813" + dependencies: + fbjs "^0.8.4" + object-assign "^4.1.0" + +react-addons-test-utils@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.6.0.tgz#062d36117fe8d18f3ba5e06eb33383b0b85ea5b9" + +react-dom@^15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.1.tgz#2cb0ed4191038e53c209eb3a79a23e2a4cf99470" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + prop-types "^15.5.10" + +react@^15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/react/-/react-15.6.1.tgz#baa8434ec6780bde997cdc380b79cd33b96393df" + dependencies: + create-react-class "^15.6.0" + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + prop-types "^15.5.10" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.2.9, readable-stream@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +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" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.10.0: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regenerator-transform@0.9.11: + version "0.9.11" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +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" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.4.tgz#86988ec8eee408e45579fce83bfd05b3adf9a155" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.0" + +request@2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + qs "~6.3.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + uuid "^3.0.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: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +requires-port@1.0.x, requires-port@1.x.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + +resolve@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +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, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + dependencies: + glob "^7.0.5" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + dependencies: + hash-base "^2.0.0" + inherits "^2.0.1" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + +safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, 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" + +samsam@1.x, samsam@^1.1.3: + version "1.2.1" + resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.2.1.tgz#edd39093a3184370cb859243b2bdf255e7d8ea67" + +sax@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + +selfsigned@^1.9.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.1.tgz#bf8cb7b83256c4551e31347c6311778db99eec52" + dependencies: + node-forge "0.6.33" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +send@0.15.4: + version "0.15.4" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.4.tgz#985faa3e284b0273c793364a35c6737bd93905b9" + dependencies: + debug "2.6.8" + depd "~1.1.1" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.2" + mime "1.3.4" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +serve-index@^1.7.2: + version "1.9.0" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.0.tgz#d2b280fc560d616ee81b48bf0fa82abed2485ce7" + dependencies: + accepts "~1.3.3" + batch "0.6.1" + debug "2.6.8" + escape-html "~1.0.3" + http-errors "~1.6.1" + mime-types "~2.1.15" + parseurl "~1.3.1" + +serve-static@1.12.4: + version "1.12.4" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.4.tgz#9b6aa98eeb7253c4eedc4c1f6fdbca609901a961" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.15.4" + +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.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.8" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" + dependencies: + inherits "^2.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +signal-exit@^3.0.0, signal-exit@^3.0.1, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +sinon@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-3.2.0.tgz#8848a66ab6e8b80b5532e3824f59f83ea2628c77" + dependencies: + diff "^3.1.0" + formatio "1.2.0" + lolex "^2.1.2" + native-promise-only "^0.8.1" + nise "^1.0.1" + path-to-regexp "^1.7.0" + samsam "^1.1.3" + text-encoding "0.6.4" + type-detect "^4.0.0" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sockjs-client@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + +sockjs@0.3.18: + version "0.3.18" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" + dependencies: + faye-websocket "^0.10.0" + uuid "^2.0.2" + +source-list-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + +source-map-support@^0.4.2, source-map-support@^0.4.3: + version "0.4.15" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" + dependencies: + source-map "^0.5.6" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + 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, source-map@~0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +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" + +spawn-wrap@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.3.8.tgz#fa2a79b990cbb0bb0018dca6748d88367b19ec31" + dependencies: + foreground-child "^1.5.6" + mkdirp "^0.5.0" + os-homedir "^1.0.1" + rimraf "^2.3.3" + signal-exit "^3.0.2" + which "^1.2.4" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +spdy-transport@^2.0.18: + version "2.0.20" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d" + dependencies: + debug "^2.6.8" + detect-node "^2.0.3" + hpack.js "^2.1.6" + obuf "^1.1.1" + readable-stream "^2.2.9" + safe-buffer "^5.0.1" + wbuf "^1.7.2" + +spdy@^3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" + dependencies: + debug "^2.6.8" + handle-thing "^1.2.5" + http-deceiver "^1.2.7" + safe-buffer "^5.0.1" + select-hose "^2.0.0" + spdy-transport "^2.0.18" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stack-utils@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + +"statuses@>= 1.3.1 < 2", statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + +stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.3.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.2.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^0.10.25: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +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" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.1, supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +supports-color@^4.0.0, supports-color@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836" + dependencies: + has-flag "^2.0.0" + +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +table@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" + dependencies: + ajv "^4.7.0" + ajv-keywords "^1.0.0" + chalk "^1.1.1" + lodash "^4.0.0" + slice-ansi "0.0.4" + string-width "^2.0.0" + +tap-mocha-reporter@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/tap-mocha-reporter/-/tap-mocha-reporter-3.0.6.tgz#12abe97ff409a5a6ecc3d70b6dba34d82184a770" + dependencies: + color-support "^1.1.0" + debug "^2.1.3" + diff "^1.3.2" + escape-string-regexp "^1.0.3" + glob "^7.0.5" + js-yaml "^3.3.1" + tap-parser "^5.1.0" + unicode-length "^1.0.0" + optionalDependencies: + readable-stream "^2.1.5" + +tap-parser@^5.1.0, tap-parser@^5.3.1: + version "5.4.0" + resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-5.4.0.tgz#6907e89725d7b7fa6ae41ee2c464c3db43188aec" + dependencies: + events-to-array "^1.0.1" + js-yaml "^3.2.7" + optionalDependencies: + readable-stream "^2" + +tap@^10.0.2: + version "10.7.1" + resolved "https://registry.yarnpkg.com/tap/-/tap-10.7.1.tgz#f2d20f38a4f6b77717521ef852bf446a7fb79e4e" + dependencies: + bind-obj-methods "^1.0.0" + bluebird "^3.3.1" + clean-yaml-object "^0.1.0" + color-support "^1.1.0" + coveralls "^2.11.2" + foreground-child "^1.3.3" + fs-exists-cached "^1.0.0" + function-loop "^1.0.1" + glob "^7.0.0" + isexe "^2.0.0" + js-yaml "^3.3.1" + nyc "^11.1.0" + opener "^1.4.1" + os-homedir "^1.0.2" + own-or "^1.0.0" + own-or-env "^1.0.0" + readable-stream "^2.3.2" + signal-exit "^3.0.0" + source-map-support "^0.4.3" + stack-utils "^1.0.0" + tap-mocha-reporter "^3.0.6" + tap-parser "^5.3.1" + tmatch "^3.1.0" + trivial-deferred "^1.0.1" + tsame "^1.1.2" + yapool "^1.0.0" + +tapable@^0.2.7: + version "0.2.8" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" + +tar-pack@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" + 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" + +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +text-encoding@0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +thunky@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e" + +time-stamp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" + +timers-browserify@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.3.tgz#41fd0bdc926a5feedc33a17a8e1f7d491925f7fc" + dependencies: + global "^4.3.2" + setimmediate "^1.0.4" + +tmatch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/tmatch/-/tmatch-3.1.0.tgz#701264fd7582d0144a80c85af3358cca269c71e3" + +tmp@^0.0.31: + version "0.0.31" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + dependencies: + os-tmpdir "~1.0.1" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-fast-properties@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +tough-cookie@>=2.3.0, 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" + dependencies: + punycode "^1.4.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +trivial-deferred@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trivial-deferred/-/trivial-deferred-1.0.1.tgz#376d4d29d951d6368a6f7a0ae85c2f4d5e0658f3" + +tryit@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" + +tsame@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/tsame/-/tsame-1.1.2.tgz#5ce0002acf685942789c63018797a2aa5e6b03c5" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.3.tgz#0e3f2670b44099b0b46c284d136a7ef49c74c2ea" + +type-is@~1.6.15: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +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" + +uglify-js@^2.6, uglify-js@^2.8.29: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +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" + +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +unicode-length@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/unicode-length/-/unicode-length-1.0.3.tgz#5ada7a7fed51841a418a328cf149478ac8358abb" + dependencies: + punycode "^1.3.2" + strip-ansi "^3.0.1" + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +url-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" + dependencies: + querystringify "0.0.x" + requires-port "1.0.x" + +url-parse@^1.1.8: + version "1.1.9" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19" + dependencies: + querystringify "~1.0.0" + requires-port "1.0.x" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3, util@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +uuid@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + +uuid@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + +v8flags@^2.0.10: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + dependencies: + user-home "^1.1.1" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +vary@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +watchpack@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" + dependencies: + async "^2.1.2" + chokidar "^1.7.0" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe" + dependencies: + minimalistic-assert "^1.0.0" + +webidl-conversions@^4.0.0, webidl-conversions@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" + +webpack-dev-middleware@^1.11.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz#d34efefb2edda7e1d3b5dbe07289513219651709" + dependencies: + memory-fs "~0.4.1" + mime "^1.3.4" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + time-stamp "^2.0.0" + +webpack-dev-server@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.7.1.tgz#21580f5a08cd065c71144cf6f61c345bca59a8b8" + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^1.6.0" + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + del "^3.0.0" + express "^4.13.3" + html-entities "^1.2.0" + http-proxy-middleware "~0.17.4" + internal-ip "^1.2.0" + ip "^1.1.5" + loglevel "^1.4.1" + opn "4.0.2" + portfinder "^1.0.9" + selfsigned "^1.9.1" + serve-index "^1.7.2" + sockjs "0.3.18" + sockjs-client "1.1.4" + spdy "^3.4.1" + strip-ansi "^3.0.0" + supports-color "^3.1.1" + webpack-dev-middleware "^1.11.0" + yargs "^6.0.0" + +webpack-sources@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf" + dependencies: + source-list-map "^2.0.0" + source-map "~0.5.3" + +webpack@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.5.4.tgz#5583eb263ed27b78b5bd17bfdfb0eb1b1cd1bf81" + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^5.1.5" + ajv-keywords "^2.0.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + +websocket-driver@>=0.5.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + dependencies: + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" + +whatwg-encoding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + dependencies: + iconv-lite "0.4.13" + +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + +whatwg-url@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.1.0.tgz#5fc8279b93d75483b9ced8b26239854847a18578" + dependencies: + lodash.sortby "^4.7.0" + tr46 "~0.0.3" + webidl-conversions "^4.0.1" + +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" + +which@^1.2.4, which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +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.2" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2, wordwrap@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^1.1.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +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" + +xtend@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yapool@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yapool/-/yapool-1.0.0.tgz#f693f29a315b50d9a9da2646a7a6645c96985b6a" + +yargs-parser@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" + dependencies: + camelcase "^3.0.0" + +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@^6.0.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + 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.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^4.2.0" + +yargs@^8.0.1, yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0"