pax_global_header00006660000000000000000000000064133122233700014506gustar00rootroot0000000000000052 comment=fa6fbb78f63f48085d223b51493be416bb49d433 prop-types-15.6.2/000077500000000000000000000000001331222337000137235ustar00rootroot00000000000000prop-types-15.6.2/.babelrc000066400000000000000000000000331331222337000153120ustar00rootroot00000000000000{ "presets": ["react"] } prop-types-15.6.2/.gitignore000066400000000000000000000000541331222337000157120ustar00rootroot00000000000000node_modules prop-types.js prop-types.min.jsprop-types-15.6.2/.npmignore000066400000000000000000000000001331222337000157100ustar00rootroot00000000000000prop-types-15.6.2/CHANGELOG.md000066400000000000000000000102551331222337000155370ustar00rootroot00000000000000## 15.6.2 * Remove the `fbjs` dependency by inlining some helpers from it ([#194](https://github.com/reactjs/prop-types/pull/194))) ## 15.6.1 * Fix an issue where outdated BSD license headers were still present in the published bundle [#162](https://github.com/facebook/prop-types/issues/162) ## 15.6.0 * Switch from BSD + Patents to MIT license * Add PropTypes.exact, like PropTypes.shape but warns on extra object keys. ([@thejameskyle](https://github.com/thejameskyle) and [@aweary](https://github.com/aweary) in [#41](https://github.com/reactjs/prop-types/pull/41) and [#87](https://github.com/reactjs/prop-types/pull/87)) ## 15.5.10 * Fix a false positive warning when using a production UMD build of a third-party library with a DEV version of React. ([@gaearon](https://github.com/gaearon) in [#50](https://github.com/reactjs/prop-types/pull/50)) ## 15.5.9 * Add `loose-envify` Browserify transform for users who don't envify globally. ([@mridgway](https://github.com/mridgway) in [#45](https://github.com/reactjs/prop-types/pull/45)) ## 15.5.8 * Limit the manual PropTypes call warning count because it has false positives with React versions earlier than 15.2.0 in the 15.x branch and 0.14.9 in the 0.14.x branch. ([@gaearon](https://github.com/gaearon) in [#26](https://github.com/reactjs/prop-types/pull/26)) ## 15.5.7 * **Critical Bugfix:** Fix an accidental breaking change that caused errors in production when used through `React.PropTypes`. ([@gaearon](https://github.com/gaearon) in [#20](https://github.com/reactjs/prop-types/pull/20)) * Improve the size of production UMD build. ([@aweary](https://github.com/aweary) in [38ba18](https://github.com/reactjs/prop-types/commit/38ba18a4a8f705f4b2b33c88204573ddd604f2d6) and [7882a7](https://github.com/reactjs/prop-types/commit/7882a7285293db5f284bcf559b869fd2cd4c44d4)) ## 15.5.6 **Note: this release has a critical issue and was deprecated. Please update to 15.5.7 or higher.** * Fix a markdown issue in README. ([@bvaughn](https://github.com/bvaughn) in [174f77](https://github.com/reactjs/prop-types/commit/174f77a50484fa628593e84b871fb40eed78b69a)) ## 15.5.5 **Note: this release has a critical issue and was deprecated. Please update to 15.5.7 or higher.** * Add missing documentation and license files. ([@bvaughn](https://github.com/bvaughn) in [0a53d3](https://github.com/reactjs/prop-types/commit/0a53d3a34283ae1e2d3aa396632b6dc2a2061e6a)) ## 15.5.4 **Note: this release has a critical issue and was deprecated. Please update to 15.5.7 or higher.** * Reduce the size of the UMD Build. ([@acdlite](https://github.com/acdlite) in [31e9344](https://github.com/reactjs/prop-types/commit/31e9344ca3233159928da66295da17dad82db1a8)) * Remove bad package url. ([@ljharb](https://github.com/ljharb) in [158198f](https://github.com/reactjs/prop-types/commit/158198fd6c468a3f6f742e0e355e622b3914048a)) * Remove the accidentally included typechecking code from the production build. ## 15.5.3 **Note: this release has a critical issue and was deprecated. Please update to 15.5.7 or higher.** * Remove the accidentally included React package code from the UMD bundle. ([@acdlite](https://github.com/acdlite) in [df318bb](https://github.com/reactjs/prop-types/commit/df318bba8a89bc5aadbb0292822cf4ed71d27ace)) ## 15.5.2 **Note: this release has a critical issue and was deprecated. Please update to 15.5.7 or higher.** * Remove dependency on React for CommonJS entry point. ([@acdlite](https://github.com/acdlite) in [cae72bb](https://github.com/reactjs/prop-types/commit/cae72bb281a3766c765e3624f6088c3713567e6d)) ## 15.5.1 **Note: this release has a critical issue and was deprecated. Please update to 15.5.7 or higher.** * Remove accidental uncompiled ES6 syntax in the published package. ([@acdlite](https://github.com/acdlite) in [e191963](https://github.com/facebook/react/commit/e1919638b39dd65eedd250a8bb649773ca61b6f1)) ## 15.5.0 **Note: this release has a critical issue and was deprecated. Please update to 15.5.7 or higher.** * Initial release. ## Before 15.5.0 PropTypes was previously included in React, but is now a separate package. For earlier history of PropTypes [see the React change log.](https://github.com/facebook/react/blob/master/CHANGELOG.md) prop-types-15.6.2/CODE_OF_CONDUCT.md000066400000000000000000000003721331222337000165240ustar00rootroot00000000000000# Code of Conduct Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please [read the full text](https://code.facebook.com/codeofconduct) so that you can understand what actions will and will not be tolerated. prop-types-15.6.2/CONTRIBUTING.md000066400000000000000000000025151331222337000161570ustar00rootroot00000000000000# Contributing to prop-types We want to make contributing to this project as easy and transparent as possible. ## Code of Conduct The code of conduct is described in [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md). ## Pull Requests We actively welcome your pull requests. 1. Fork the repo and create your branch from `master`. 2. If you've added code that should be tested, add tests. 3. If you've changed APIs, update the documentation. 4. Ensure the test suite passes. 5. Make sure your code lints. 6. If you haven't already, complete the Contributor License Agreement ("CLA"). ## Contributor License Agreement ("CLA") In order to accept your pull request, we need you to submit a CLA. You only need to do this once to work on any of Facebook's open source projects. Complete your CLA here: ## Issues We use GitHub issues to track public bugs. Please ensure your description is clear and has sufficient instructions to be able to reproduce the issue. Facebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe disclosure of security bugs. In those cases, please go through the process outlined on that page and do not file a public issue. ## License By contributing to prop-types, you agree that your contributions will be licensed under the LICENSE file in the root directory of this source tree. prop-types-15.6.2/LICENSE000066400000000000000000000020701331222337000147270ustar00rootroot00000000000000MIT License Copyright (c) 2013-present, Facebook, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. prop-types-15.6.2/README.md000066400000000000000000000247301331222337000152100ustar00rootroot00000000000000# prop-types Runtime type checking for React props and similar objects. You can use prop-types to document the intended types of properties passed to components. React (and potentially other libraries—see the checkPropTypes() reference below) will check props passed to your components against those definitions, and warn in development if they don’t match. ## Installation ```shell npm install --save prop-types ``` ## Importing ```js import PropTypes from 'prop-types'; // ES6 var PropTypes = require('prop-types'); // ES5 with npm ``` ### CDN If you prefer to exclude `prop-types` from your application and use it globally via `window.PropTypes`, the `prop-types` package provides single-file distributions, which are hosted on the following CDNs: * [**unpkg**](https://unpkg.com/prop-types/) ```html ``` * [**cdnjs**](https://cdnjs.com/libraries/prop-types) ```html ``` To load a specific version of `prop-types` replace `15.6.0` with the version number. ## Usage PropTypes was originally exposed as part of the React core module, and is commonly used with React components. Here is an example of using PropTypes with a React component, which also documents the different validators provided: ```js import React from 'react'; import PropTypes from 'prop-types'; class MyComponent extends React.Component { render() { // ... do things with the props } } MyComponent.propTypes = { // You can declare that a prop is a specific JS primitive. By default, these // are all optional. optionalArray: PropTypes.array, optionalBool: PropTypes.bool, optionalFunc: PropTypes.func, optionalNumber: PropTypes.number, optionalObject: PropTypes.object, optionalString: PropTypes.string, optionalSymbol: PropTypes.symbol, // Anything that can be rendered: numbers, strings, elements or an array // (or fragment) containing these types. optionalNode: PropTypes.node, // A React element. optionalElement: PropTypes.element, // You can also declare that a prop is an instance of a class. This uses // JS's instanceof operator. optionalMessage: PropTypes.instanceOf(Message), // You can ensure that your prop is limited to specific values by treating // it as an enum. optionalEnum: PropTypes.oneOf(['News', 'Photos']), // An object that could be one of many types optionalUnion: PropTypes.oneOfType([ PropTypes.string, PropTypes.number, PropTypes.instanceOf(Message) ]), // An array of a certain type optionalArrayOf: PropTypes.arrayOf(PropTypes.number), // An object with property values of a certain type optionalObjectOf: PropTypes.objectOf(PropTypes.number), // You can chain any of the above with `isRequired` to make sure a warning // is shown if the prop isn't provided. // An object taking on a particular shape optionalObjectWithShape: PropTypes.shape({ optionalProperty: PropTypes.string, requiredProperty: PropTypes.number.isRequired }), // An object with warnings on extra properties optionalObjectWithStrictShape: PropTypes.exact({ optionalProperty: PropTypes.string, requiredProperty: PropTypes.number.isRequired }), requiredFunc: PropTypes.func.isRequired, // A value of any data type requiredAny: PropTypes.any.isRequired, // You can also specify a custom validator. It should return an Error // object if the validation fails. Don't `console.warn` or throw, as this // won't work inside `oneOfType`. customProp: function(props, propName, componentName) { if (!/matchme/.test(props[propName])) { return new Error( 'Invalid prop `' + propName + '` supplied to' + ' `' + componentName + '`. Validation failed.' ); } }, // You can also supply a custom validator to `arrayOf` and `objectOf`. // It should return an Error object if the validation fails. The validator // will be called for each key in the array or object. The first two // arguments of the validator are the array or object itself, and the // current item's key. customArrayProp: PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) { if (!/matchme/.test(propValue[key])) { return new Error( 'Invalid prop `' + propFullName + '` supplied to' + ' `' + componentName + '`. Validation failed.' ); } }) }; ``` Refer to the [React documentation](https://facebook.github.io/react/docs/typechecking-with-proptypes.html) for more information. ## Migrating from React.PropTypes Check out [Migrating from React.PropTypes](https://facebook.github.io/react/blog/2017/04/07/react-v15.5.0.html#migrating-from-react.proptypes) for details on how to migrate to `prop-types` from `React.PropTypes`. Note that this blog posts **mentions a codemod script that performs the conversion automatically**. There are also important notes below. ## How to Depend on This Package? For apps, we recommend putting it in `dependencies` with a caret range. For example: ```js "dependencies": { "prop-types": "^15.5.7" } ``` For libraries, we *also* recommend leaving it in `dependencies`: ```js "dependencies": { "prop-types": "^15.5.7" }, "peerDependencies": { "react": "^15.5.0" } ``` **Note:** there are known issues in versions before 15.5.7 so we recommend using it as the minimal version. Make sure that the version range uses a caret (`^`) and thus is broad enough for npm to efficiently deduplicate packages. For UMD bundles of your components, make sure you **don’t** include `PropTypes` in the build. Usually this is done by marking it as an external (the specifics depend on your bundler), just like you do with React. ## Compatibility ### React 0.14 This package is compatible with **React 0.14.9**. Compared to 0.14.8 (which was released a year ago), there are no other changes in 0.14.9, so it should be a painless upgrade. ```shell # ATTENTION: Only run this if you still use React 0.14! npm install --save react@^0.14.9 react-dom@^0.14.9 ``` ### React 15+ This package is compatible with **React 15.3.0** and higher. ``` npm install --save react@^15.3.0 react-dom@^15.3.0 ``` ### What happens on other React versions? It outputs warnings with the message below even though the developer doesn’t do anything wrong. Unfortunately there is no solution for this other than updating React to either 15.3.0 or higher, or 0.14.9 if you’re using React 0.14. ## Difference from `React.PropTypes`: Don’t Call Validator Functions First of all, **which version of React are you using**? You might be seeing this message because a component library has updated to use `prop-types` package, but your version of React is incompatible with it. See the [above section](#compatibility) for more details. Are you using either React 0.14.9 or a version higher than React 15.3.0? Read on. When you migrate components to use the standalone `prop-types`, **all validator functions will start throwing an error if you call them directly**. This makes sure that nobody relies on them in production code, and it is safe to strip their implementations to optimize the bundle size. Code like this is still fine: ```js MyComponent.propTypes = { myProp: PropTypes.bool }; ``` However, code like this will not work with the `prop-types` package: ```js // Will not work with `prop-types` package! var errorOrNull = PropTypes.bool(42, 'myProp', 'MyComponent', 'prop'); ``` It will throw an error: ``` Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. ``` (If you see **a warning** rather than an error with this message, please check the [above section about compatibility](#compatibility).) This is new behavior, and you will only encounter it when you migrate from `React.PropTypes` to the `prop-types` package. For the vast majority of components, this doesn’t matter, and if you didn’t see [this warning](https://facebook.github.io/react/warnings/dont-call-proptypes.html) in your components, your code is safe to migrate. This is not a breaking change in React because you are only opting into this change for a component by explicitly changing your imports to use `prop-types`. If you temporarily need the old behavior, you can keep using `React.PropTypes` until React 16. **If you absolutely need to trigger the validation manually**, call `PropTypes.checkPropTypes()`. Unlike the validators themselves, this function is safe to call in production, as it will be replaced by an empty function: ```js // Works with standalone PropTypes PropTypes.checkPropTypes(MyComponent.propTypes, props, 'prop', 'MyComponent'); ``` See below for more info. **You might also see this error** if you’re calling a `PropTypes` validator from your own custom `PropTypes` validator. In this case, the fix is to make sure that you are passing *all* of the arguments to the inner function. There is a more in-depth explanation of how to fix it [on this page](https://facebook.github.io/react/warnings/dont-call-proptypes.html#fixing-the-false-positive-in-third-party-proptypes). Alternatively, you can temporarily keep using `React.PropTypes` until React 16, as it would still only warn in this case. If you use a bundler like Browserify or Webpack, don’t forget to [follow these instructions](https://reactjs.org/docs/optimizing-performance.html#use-the-production-build) to correctly bundle your application in development or production mode. Otherwise you’ll ship unnecessary code to your users. ## PropTypes.checkPropTypes React will automatically check the propTypes you set on the component, but if you are using PropTypes without React then you may want to manually call `PropTypes.checkPropTypes`, like so: ```js const myPropTypes = { name: PropTypes.string, age: PropTypes.number, // ... define your prop validations }; const props = { name: 'hello', // is valid age: 'world', // not valid }; // Let's say your component is called 'MyComponent' // Works with standalone PropTypes PropTypes.checkPropTypes(myPropTypes, props, 'prop', 'MyComponent'); // This will warn as follows: // Warning: Failed prop type: Invalid prop `age` of type `string` supplied to // `MyComponent`, expected `number`. ``` prop-types-15.6.2/__tests__/000077500000000000000000000000001331222337000156615ustar00rootroot00000000000000prop-types-15.6.2/__tests__/PropTypesDevelopmentReact15.js000066400000000000000000001160761331222337000235270ustar00rootroot00000000000000/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @emails react-core */ 'use strict'; let React; let PropTypes; function resetWarningCache() { jest.resetModules(); React = require('react'); // This is how React 15 imports `prop-types`. PropTypes = require('../factory')(React.isValidElement); } function getPropTypeWarningMessage(propTypes, object, componentName) { if (!console.error.calls) { spyOn(console, 'error'); } else { console.error.calls.reset(); } resetWarningCache(); PropTypes.checkPropTypes(propTypes, object, 'prop', 'testComponent'); const callCount = console.error.calls.count(); if (callCount > 1) { throw new Error('Too many warnings.'); } const message = console.error.calls.argsFor(0)[0] || null; console.error.calls.reset(); return message; } function typeCheckFail(declaration, value, expectedMessage) { const propTypes = { testProp: declaration, }; const props = { testProp: value, }; const message = getPropTypeWarningMessage(propTypes, props, 'testComponent'); expect(message).toContain(expectedMessage); } function typeCheckFailRequiredValues(declaration) { const specifiedButIsNullMsg = 'The prop `testProp` is marked as required in ' + '`testComponent`, but its value is `null`.'; const unspecifiedMsg = 'The prop `testProp` is marked as required in ' + '`testComponent`, but its value is \`undefined\`.'; const propTypes = {testProp: declaration}; // Required prop is null const message1 = getPropTypeWarningMessage( propTypes, {testProp: null}, 'testComponent', ); expect(message1).toContain(specifiedButIsNullMsg); // Required prop is undefined const message2 = getPropTypeWarningMessage( propTypes, {testProp: undefined}, 'testComponent', ); expect(message2).toContain(unspecifiedMsg); // Required prop is not a member of props object const message3 = getPropTypeWarningMessage(propTypes, {}, 'testComponent'); expect(message3).toContain(unspecifiedMsg); } function typeCheckPass(declaration, value) { const propTypes = { testProp: declaration, }; const props = { testProp: value, }; const message = getPropTypeWarningMessage(propTypes, props, 'testComponent'); expect(message).toBe(null); } function expectWarningInDevelopment(declaration, value) { resetWarningCache(); const props = {testProp: value}; const propName = 'testProp' + Math.random().toString(); const componentName = 'testComponent' + Math.random().toString(); for (let i = 0; i < 3; i++) { declaration(props, propName, componentName, 'prop'); } expect(console.error.calls.count()).toBe(1); expect(console.error.calls.argsFor(0)[0]).toContain( 'You are manually calling a React.PropTypes validation ', ); console.error.calls.reset(); } describe('PropTypesDevelopmentReact15', () => { beforeEach(() => { resetWarningCache(); }); describe('checkPropTypes', () => { it('should warn for invalid validators', () => { spyOn(console, 'error') const propTypes = { foo: undefined }; const props = { foo: 'foo' }; PropTypes.checkPropTypes( propTypes, props, 'prop', 'testComponent', null, ); expect(console.error.calls.argsFor(0)[0]).toEqual( 'Warning: Failed prop type: testComponent: prop type `foo` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `undefined`.' ); }); it('does not return a value from a validator', () => { spyOn(console, 'error'); const propTypes = { foo(props, propName, componentName) { return new Error('some error'); }, }; const props = {foo: 'foo'}; const returnValue = PropTypes.checkPropTypes( propTypes, props, 'prop', 'testComponent', null, ); expect(console.error.calls.argsFor(0)[0]).toContain('some error'); expect(returnValue).toBe(undefined); }); it('does not throw if validator throws', () => { spyOn(console, 'error'); const propTypes = { foo(props, propName, componentName) { throw new Error('some error'); }, }; const props = {foo: 'foo'}; const returnValue = PropTypes.checkPropTypes( propTypes, props, 'prop', 'testComponent', null, ); expect(console.error.calls.argsFor(0)[0]).toContain('some error'); expect(returnValue).toBe(undefined); }); it('warns if any of the propTypes is not a function', () => { spyOn(console, 'error'); const propTypes = { foo: PropTypes.invalid_type, }; const props = { foo: 'foo' }; const returnValue = PropTypes.checkPropTypes(propTypes, props, 'prop', 'testComponent', null); expect(console.error.calls.argsFor(0)[0]).toEqual( 'Warning: Failed prop type: testComponent: prop type `foo` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `undefined`.' ); expect(returnValue).toBe(undefined); }); }); describe('Primitive Types', () => { it('should warn for invalid strings', () => { typeCheckFail( PropTypes.string, [], 'Invalid prop `testProp` of type `array` supplied to ' + '`testComponent`, expected `string`.', ); typeCheckFail( PropTypes.string, false, 'Invalid prop `testProp` of type `boolean` supplied to ' + '`testComponent`, expected `string`.', ); typeCheckFail( PropTypes.string, 0, 'Invalid prop `testProp` of type `number` supplied to ' + '`testComponent`, expected `string`.', ); typeCheckFail( PropTypes.string, {}, 'Invalid prop `testProp` of type `object` supplied to ' + '`testComponent`, expected `string`.', ); typeCheckFail( PropTypes.string, Symbol(), 'Invalid prop `testProp` of type `symbol` supplied to ' + '`testComponent`, expected `string`.', ); }); it('should fail date and regexp correctly', () => { typeCheckFail( PropTypes.string, new Date(), 'Invalid prop `testProp` of type `date` supplied to ' + '`testComponent`, expected `string`.', ); typeCheckFail( PropTypes.string, /please/, 'Invalid prop `testProp` of type `regexp` supplied to ' + '`testComponent`, expected `string`.', ); }); it('should not warn for valid values', () => { typeCheckPass(PropTypes.array, []); typeCheckPass(PropTypes.bool, false); typeCheckPass(PropTypes.func, function() {}); typeCheckPass(PropTypes.number, 0); typeCheckPass(PropTypes.string, ''); typeCheckPass(PropTypes.object, {}); typeCheckPass(PropTypes.object, new Date()); typeCheckPass(PropTypes.object, /please/); typeCheckPass(PropTypes.symbol, Symbol()); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.string, null); typeCheckPass(PropTypes.string, undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues(PropTypes.string.isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectWarningInDevelopment(PropTypes.array, /please/); expectWarningInDevelopment(PropTypes.array, []); expectWarningInDevelopment(PropTypes.array.isRequired, /please/); expectWarningInDevelopment(PropTypes.array.isRequired, []); expectWarningInDevelopment(PropTypes.array.isRequired, null); expectWarningInDevelopment(PropTypes.array.isRequired, undefined); expectWarningInDevelopment(PropTypes.bool, []); expectWarningInDevelopment(PropTypes.bool, true); expectWarningInDevelopment(PropTypes.bool.isRequired, []); expectWarningInDevelopment(PropTypes.bool.isRequired, true); expectWarningInDevelopment(PropTypes.bool.isRequired, null); expectWarningInDevelopment(PropTypes.bool.isRequired, undefined); expectWarningInDevelopment(PropTypes.func, false); expectWarningInDevelopment(PropTypes.func, function() {}); expectWarningInDevelopment(PropTypes.func.isRequired, false); expectWarningInDevelopment(PropTypes.func.isRequired, function() {}); expectWarningInDevelopment(PropTypes.func.isRequired, null); expectWarningInDevelopment(PropTypes.func.isRequired, undefined); expectWarningInDevelopment(PropTypes.number, function() {}); expectWarningInDevelopment(PropTypes.number, 42); expectWarningInDevelopment(PropTypes.number.isRequired, function() {}); expectWarningInDevelopment(PropTypes.number.isRequired, 42); expectWarningInDevelopment(PropTypes.number.isRequired, null); expectWarningInDevelopment(PropTypes.number.isRequired, undefined); expectWarningInDevelopment(PropTypes.string, 0); expectWarningInDevelopment(PropTypes.string, 'foo'); expectWarningInDevelopment(PropTypes.string.isRequired, 0); expectWarningInDevelopment(PropTypes.string.isRequired, 'foo'); expectWarningInDevelopment(PropTypes.string.isRequired, null); expectWarningInDevelopment(PropTypes.string.isRequired, undefined); expectWarningInDevelopment(PropTypes.symbol, 0); expectWarningInDevelopment(PropTypes.symbol, Symbol('Foo')); expectWarningInDevelopment(PropTypes.symbol.isRequired, 0); expectWarningInDevelopment(PropTypes.symbol.isRequired, Symbol('Foo')); expectWarningInDevelopment(PropTypes.symbol.isRequired, null); expectWarningInDevelopment(PropTypes.symbol.isRequired, undefined); expectWarningInDevelopment(PropTypes.object, ''); expectWarningInDevelopment(PropTypes.object, {foo: 'bar'}); expectWarningInDevelopment(PropTypes.object.isRequired, ''); expectWarningInDevelopment(PropTypes.object.isRequired, {foo: 'bar'}); expectWarningInDevelopment(PropTypes.object.isRequired, null); expectWarningInDevelopment(PropTypes.object.isRequired, undefined); }); }); describe('Any type', () => { it('should should accept any value', () => { typeCheckPass(PropTypes.any, 0); typeCheckPass(PropTypes.any, 'str'); typeCheckPass(PropTypes.any, []); typeCheckPass(PropTypes.any, Symbol()); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.any, null); typeCheckPass(PropTypes.any, undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues(PropTypes.any.isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectWarningInDevelopment(PropTypes.any, null); expectWarningInDevelopment(PropTypes.any.isRequired, null); expectWarningInDevelopment(PropTypes.any.isRequired, undefined); }); }); describe('ArrayOf Type', () => { it('should fail for invalid argument', () => { typeCheckFail( PropTypes.arrayOf({foo: PropTypes.string}), {foo: 'bar'}, 'Property `testProp` of component `testComponent` has invalid PropType notation inside arrayOf.', ); }); it('should support the arrayOf propTypes', () => { typeCheckPass(PropTypes.arrayOf(PropTypes.number), [1, 2, 3]); typeCheckPass(PropTypes.arrayOf(PropTypes.string), ['a', 'b', 'c']); typeCheckPass(PropTypes.arrayOf(PropTypes.oneOf(['a', 'b'])), ['a', 'b']); typeCheckPass(PropTypes.arrayOf(PropTypes.symbol), [Symbol(), Symbol()]); }); it('should support arrayOf with complex types', () => { typeCheckPass( PropTypes.arrayOf(PropTypes.shape({a: PropTypes.number.isRequired})), [{a: 1}, {a: 2}], ); function Thing() {} typeCheckPass(PropTypes.arrayOf(PropTypes.instanceOf(Thing)), [ new Thing(), new Thing(), ]); }); it('should warn with invalid items in the array', () => { typeCheckFail( PropTypes.arrayOf(PropTypes.number), [1, 2, 'b'], 'Invalid prop `testProp[2]` of type `string` supplied to ' + '`testComponent`, expected `number`.', ); }); it('should warn with invalid complex types', () => { function Thing() {} const name = Thing.name || '<>'; typeCheckFail( PropTypes.arrayOf(PropTypes.instanceOf(Thing)), [new Thing(), 'xyz'], 'Invalid prop `testProp[1]` of type `String` supplied to ' + '`testComponent`, expected instance of `' + name + '`.', ); }); it('should warn when passed something other than an array', () => { typeCheckFail( PropTypes.arrayOf(PropTypes.number), {'0': 'maybe-array', length: 1}, 'Invalid prop `testProp` of type `object` supplied to ' + '`testComponent`, expected an array.', ); typeCheckFail( PropTypes.arrayOf(PropTypes.number), 123, 'Invalid prop `testProp` of type `number` supplied to ' + '`testComponent`, expected an array.', ); typeCheckFail( PropTypes.arrayOf(PropTypes.number), 'string', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected an array.', ); }); it('should not warn when passing an empty array', () => { typeCheckPass(PropTypes.arrayOf(PropTypes.number), []); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.arrayOf(PropTypes.number), null); typeCheckPass(PropTypes.arrayOf(PropTypes.number), undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues( PropTypes.arrayOf(PropTypes.number).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectWarningInDevelopment(PropTypes.arrayOf({foo: PropTypes.string}), { foo: 'bar', }); expectWarningInDevelopment(PropTypes.arrayOf(PropTypes.number), [ 1, 2, 'b', ]); expectWarningInDevelopment(PropTypes.arrayOf(PropTypes.number), { '0': 'maybe-array', length: 1, }); expectWarningInDevelopment( PropTypes.arrayOf(PropTypes.number).isRequired, null, ); expectWarningInDevelopment( PropTypes.arrayOf(PropTypes.number).isRequired, undefined, ); }); }); describe('Component Type', () => { it('should support components', () => { typeCheckPass(PropTypes.element,
); }); it('should not support multiple components or scalar values', () => { typeCheckFail( PropTypes.element, [
,
], 'Invalid prop `testProp` of type `array` supplied to `testComponent`, ' + 'expected a single ReactElement.', ); typeCheckFail( PropTypes.element, 123, 'Invalid prop `testProp` of type `number` supplied to `testComponent`, ' + 'expected a single ReactElement.', ); typeCheckFail( PropTypes.element, 'foo', 'Invalid prop `testProp` of type `string` supplied to `testComponent`, ' + 'expected a single ReactElement.', ); typeCheckFail( PropTypes.element, false, 'Invalid prop `testProp` of type `boolean` supplied to `testComponent`, ' + 'expected a single ReactElement.', ); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.element, null); typeCheckPass(PropTypes.element, undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues(PropTypes.element.isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectWarningInDevelopment(PropTypes.element, [
,
]); expectWarningInDevelopment(PropTypes.element,
); expectWarningInDevelopment(PropTypes.element, 123); expectWarningInDevelopment(PropTypes.element, 'foo'); expectWarningInDevelopment(PropTypes.element, false); expectWarningInDevelopment(PropTypes.element.isRequired, null); expectWarningInDevelopment(PropTypes.element.isRequired, undefined); }); }); describe('Instance Types', () => { it('should warn for invalid instances', () => { function Person() {} function Cat() {} const personName = Person.name || '<>'; const dateName = Date.name || '<>'; const regExpName = RegExp.name || '<>'; typeCheckFail( PropTypes.instanceOf(Person), false, 'Invalid prop `testProp` of type `Boolean` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); typeCheckFail( PropTypes.instanceOf(Person), {}, 'Invalid prop `testProp` of type `Object` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); typeCheckFail( PropTypes.instanceOf(Person), '', 'Invalid prop `testProp` of type `String` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); typeCheckFail( PropTypes.instanceOf(Date), {}, 'Invalid prop `testProp` of type `Object` supplied to ' + '`testComponent`, expected instance of `' + dateName + '`.', ); typeCheckFail( PropTypes.instanceOf(RegExp), {}, 'Invalid prop `testProp` of type `Object` supplied to ' + '`testComponent`, expected instance of `' + regExpName + '`.', ); typeCheckFail( PropTypes.instanceOf(Person), new Cat(), 'Invalid prop `testProp` of type `Cat` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); typeCheckFail( PropTypes.instanceOf(Person), Object.create(null), 'Invalid prop `testProp` of type `<>` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); }); it('should not warn for valid values', () => { function Person() {} function Engineer() {} Engineer.prototype = new Person(); typeCheckPass(PropTypes.instanceOf(Person), new Person()); typeCheckPass(PropTypes.instanceOf(Person), new Engineer()); typeCheckPass(PropTypes.instanceOf(Date), new Date()); typeCheckPass(PropTypes.instanceOf(RegExp), /please/); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.instanceOf(String), null); typeCheckPass(PropTypes.instanceOf(String), undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues(PropTypes.instanceOf(String).isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectWarningInDevelopment(PropTypes.instanceOf(Date), {}); expectWarningInDevelopment(PropTypes.instanceOf(Date), new Date()); expectWarningInDevelopment(PropTypes.instanceOf(Date).isRequired, {}); expectWarningInDevelopment( PropTypes.instanceOf(Date).isRequired, new Date(), ); }); }); describe('React Component Types', () => { it('should warn for invalid values', () => { const failMessage = 'Invalid prop `testProp` supplied to ' + '`testComponent`, expected a ReactNode.'; typeCheckFail(PropTypes.node, true, failMessage); typeCheckFail(PropTypes.node, function() {}, failMessage); typeCheckFail(PropTypes.node, {key: function() {}}, failMessage); typeCheckFail(PropTypes.node, {key:
}, failMessage); }); it('should not warn for valid values', () => { function MyComponent() {} MyComponent.prototype.render = function() { return
; }; typeCheckPass(PropTypes.node,
); typeCheckPass(PropTypes.node, false); typeCheckPass(PropTypes.node, ); typeCheckPass(PropTypes.node, 'Some string'); typeCheckPass(PropTypes.node, []); typeCheckPass(PropTypes.node, [ 123, 'Some string',
, ['Another string', [456], , ], , null, undefined, ]); }); it('should not warn for iterables', () => { function MyComponent() {} MyComponent.prototype.render = function() { return
; }; const iterable = { '@@iterator': function() { let i = 0; return { next: function() { const done = ++i > 2; return {value: done ? undefined : , done: done}; }, }; }, }; typeCheckPass(PropTypes.node, iterable); }); it('should not warn for entry iterables', () => { function MyComponent() {} MyComponent.prototype.render = function() { return
; }; const iterable = { '@@iterator': function() { let i = 0; return { next: function() { const done = ++i > 2; return { value: done ? undefined : ['#' + i, ], done: done, }; }, }; }, }; iterable.entries = iterable['@@iterator']; typeCheckPass(PropTypes.node, iterable); }); it('should not warn for null/undefined if not required', () => { typeCheckPass(PropTypes.node, null); typeCheckPass(PropTypes.node, undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues(PropTypes.node.isRequired); }); it('should accept empty array for required props', () => { typeCheckPass(PropTypes.node.isRequired, []); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectWarningInDevelopment(PropTypes.node, 'node'); expectWarningInDevelopment(PropTypes.node, {}); expectWarningInDevelopment(PropTypes.node.isRequired, 'node'); expectWarningInDevelopment(PropTypes.node.isRequired, undefined); expectWarningInDevelopment(PropTypes.node.isRequired, undefined); }); }); describe('ObjectOf Type', () => { it('should fail for invalid argument', () => { typeCheckFail( PropTypes.objectOf({foo: PropTypes.string}), {foo: 'bar'}, 'Property `testProp` of component `testComponent` has invalid PropType notation inside objectOf.', ); }); it('should support the objectOf propTypes', () => { typeCheckPass(PropTypes.objectOf(PropTypes.number), {a: 1, b: 2, c: 3}); typeCheckPass(PropTypes.objectOf(PropTypes.string), { a: 'a', b: 'b', c: 'c', }); typeCheckPass(PropTypes.objectOf(PropTypes.oneOf(['a', 'b'])), { a: 'a', b: 'b', }); typeCheckPass(PropTypes.objectOf(PropTypes.symbol), { a: Symbol(), b: Symbol(), c: Symbol(), }); }); it('should support objectOf with complex types', () => { typeCheckPass( PropTypes.objectOf(PropTypes.shape({a: PropTypes.number.isRequired})), {a: {a: 1}, b: {a: 2}}, ); function Thing() {} typeCheckPass(PropTypes.objectOf(PropTypes.instanceOf(Thing)), { a: new Thing(), b: new Thing(), }); }); it('should warn with invalid items in the object', () => { typeCheckFail( PropTypes.objectOf(PropTypes.number), {a: 1, b: 2, c: 'b'}, 'Invalid prop `testProp.c` of type `string` supplied to `testComponent`, ' + 'expected `number`.', ); }); it('should warn with invalid complex types', () => { function Thing() {} const name = Thing.name || '<>'; typeCheckFail( PropTypes.objectOf(PropTypes.instanceOf(Thing)), {a: new Thing(), b: 'xyz'}, 'Invalid prop `testProp.b` of type `String` supplied to ' + '`testComponent`, expected instance of `' + name + '`.', ); }); it('should warn when passed something other than an object', () => { typeCheckFail( PropTypes.objectOf(PropTypes.number), [1, 2], 'Invalid prop `testProp` of type `array` supplied to ' + '`testComponent`, expected an object.', ); typeCheckFail( PropTypes.objectOf(PropTypes.number), 123, 'Invalid prop `testProp` of type `number` supplied to ' + '`testComponent`, expected an object.', ); typeCheckFail( PropTypes.objectOf(PropTypes.number), 'string', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected an object.', ); typeCheckFail( PropTypes.objectOf(PropTypes.symbol), Symbol(), 'Invalid prop `testProp` of type `symbol` supplied to ' + '`testComponent`, expected an object.', ); }); it('should not warn when passing an empty object', () => { typeCheckPass(PropTypes.objectOf(PropTypes.number), {}); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.objectOf(PropTypes.number), null); typeCheckPass(PropTypes.objectOf(PropTypes.number), undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues( PropTypes.objectOf(PropTypes.number).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectWarningInDevelopment(PropTypes.objectOf({foo: PropTypes.string}), { foo: 'bar', }); expectWarningInDevelopment(PropTypes.objectOf(PropTypes.number), { a: 1, b: 2, c: 'b', }); expectWarningInDevelopment(PropTypes.objectOf(PropTypes.number), [1, 2]); expectWarningInDevelopment(PropTypes.objectOf(PropTypes.number), null); expectWarningInDevelopment( PropTypes.objectOf(PropTypes.number), undefined, ); }); }); describe('OneOf Types', () => { it('should warn but not error for invalid argument', () => { spyOn(console, 'error'); PropTypes.oneOf('red', 'blue'); expect(console.error).toHaveBeenCalled(); expect(console.error.calls.argsFor(0)[0]).toContain( 'Invalid argument supplied to oneOf, expected an instance of array.', ); typeCheckPass(PropTypes.oneOf('red', 'blue'), 'red'); }); it('should warn for invalid values', () => { typeCheckFail( PropTypes.oneOf(['red', 'blue']), true, 'Invalid prop `testProp` of value `true` supplied to ' + '`testComponent`, expected one of ["red","blue"].', ); typeCheckFail( PropTypes.oneOf(['red', 'blue']), [], 'Invalid prop `testProp` of value `` supplied to `testComponent`, ' + 'expected one of ["red","blue"].', ); typeCheckFail( PropTypes.oneOf(['red', 'blue']), '', 'Invalid prop `testProp` of value `` supplied to `testComponent`, ' + 'expected one of ["red","blue"].', ); typeCheckFail( PropTypes.oneOf([0, 'false']), false, 'Invalid prop `testProp` of value `false` supplied to ' + '`testComponent`, expected one of [0,"false"].', ); }); it('should not warn for valid values', () => { typeCheckPass(PropTypes.oneOf(['red', 'blue']), 'red'); typeCheckPass(PropTypes.oneOf(['red', 'blue']), 'blue'); typeCheckPass(PropTypes.oneOf(['red', 'blue', NaN]), NaN); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.oneOf(['red', 'blue']), null); typeCheckPass(PropTypes.oneOf(['red', 'blue']), undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues(PropTypes.oneOf(['red', 'blue']).isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectWarningInDevelopment(PropTypes.oneOf(['red', 'blue']), true); expectWarningInDevelopment(PropTypes.oneOf(['red', 'blue']), null); expectWarningInDevelopment(PropTypes.oneOf(['red', 'blue']), undefined); }); }); describe('Union Types', () => { it('should warn but not error for invalid argument', () => { spyOn(console, 'error'); PropTypes.oneOfType(PropTypes.string, PropTypes.number); expect(console.error).toHaveBeenCalled(); expect(console.error.calls.argsFor(0)[0]).toContain( 'Invalid argument supplied to oneOfType, expected an instance of array.', ); typeCheckPass(PropTypes.oneOf(PropTypes.string, PropTypes.number), []); }); it('should warn but for invalid argument type', () => { spyOn(console, 'error'); const types = [undefined, null, false, new Date, /foo/, {}]; const expected = ['undefined', 'null', 'a boolean', 'a date', 'a regexp', 'an object']; for (let i = 0; i < expected.length; i++) { const type = types[i]; PropTypes.oneOfType([type]); expect(console.error).toHaveBeenCalled(); expect(console.error.calls.argsFor(0)[0]).toContain( 'Invalid argument supplied to oneOfType. Expected an array of check functions, ' + 'but received ' + expected[i] + ' at index 0.' ); console.error.calls.reset(); } typeCheckPass(PropTypes.oneOf(PropTypes.string, PropTypes.number), []); }); it('should warn if none of the types are valid', () => { typeCheckFail( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), [], 'Invalid prop `testProp` supplied to `testComponent`.', ); const checker = PropTypes.oneOfType([ PropTypes.shape({a: PropTypes.number.isRequired}), PropTypes.shape({b: PropTypes.number.isRequired}), ]); typeCheckFail( checker, {c: 1}, 'Invalid prop `testProp` supplied to `testComponent`.', ); }); it('should not warn if one of the types are valid', () => { let checker = PropTypes.oneOfType([PropTypes.string, PropTypes.number]); typeCheckPass(checker, null); typeCheckPass(checker, 'foo'); typeCheckPass(checker, 123); checker = PropTypes.oneOfType([ PropTypes.shape({a: PropTypes.number.isRequired}), PropTypes.shape({b: PropTypes.number.isRequired}), ]); typeCheckPass(checker, {a: 1}); typeCheckPass(checker, {b: 1}); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), null, ); typeCheckPass( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), undefined, ); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues( PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectWarningInDevelopment( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), [], ); expectWarningInDevelopment( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), null, ); expectWarningInDevelopment( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), undefined, ); }); }); describe('Shape Types', () => { it('should warn for non objects', () => { typeCheckFail( PropTypes.shape({}), 'some string', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected `object`.', ); typeCheckFail( PropTypes.shape({}), ['array'], 'Invalid prop `testProp` of type `array` supplied to ' + '`testComponent`, expected `object`.', ); }); it('should not warn for empty values', () => { typeCheckPass(PropTypes.shape({}), undefined); typeCheckPass(PropTypes.shape({}), null); typeCheckPass(PropTypes.shape({}), {}); }); it('should not warn for an empty object', () => { typeCheckPass(PropTypes.shape({}).isRequired, {}); }); it('should not warn for non specified types', () => { typeCheckPass(PropTypes.shape({}), {key: 1}); }); it('should not warn for valid types', () => { typeCheckPass(PropTypes.shape({key: PropTypes.number}), {key: 1}); }); it('should warn for required valid types', () => { typeCheckFail( PropTypes.shape({key: PropTypes.number.isRequired}), {}, 'The prop `testProp.key` is marked as required in `testComponent`, ' + 'but its value is `undefined`.', ); }); it('should warn for the first required type', () => { typeCheckFail( PropTypes.shape({ key: PropTypes.number.isRequired, secondKey: PropTypes.number.isRequired, }), {}, 'The prop `testProp.key` is marked as required in `testComponent`, ' + 'but its value is `undefined`.', ); }); it('should warn for invalid key types', () => { typeCheckFail( PropTypes.shape({key: PropTypes.number}), {key: 'abc'}, 'Invalid prop `testProp.key` of type `string` supplied to `testComponent`, ' + 'expected `number`.', ); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass( PropTypes.shape(PropTypes.shape({key: PropTypes.number})), null, ); typeCheckPass( PropTypes.shape(PropTypes.shape({key: PropTypes.number})), undefined, ); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues( PropTypes.shape({key: PropTypes.number}).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectWarningInDevelopment(PropTypes.shape({}), 'some string'); expectWarningInDevelopment(PropTypes.shape({foo: PropTypes.number}), { foo: 42, }); expectWarningInDevelopment( PropTypes.shape({key: PropTypes.number}).isRequired, null, ); expectWarningInDevelopment( PropTypes.shape({key: PropTypes.number}).isRequired, undefined, ); expectWarningInDevelopment(PropTypes.element,
); }); }); describe('Exact Types', () => { it('should warn for non objects', () => { typeCheckFail( PropTypes.exact({}), 'some string', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected `object`.', ); typeCheckFail( PropTypes.exact({}), ['array'], 'Invalid prop `testProp` of type `array` supplied to ' + '`testComponent`, expected `object`.', ); }); it('should not warn for empty values', () => { typeCheckPass(PropTypes.exact({}), undefined); typeCheckPass(PropTypes.exact({}), null); typeCheckPass(PropTypes.exact({}), {}); }); it('should not warn for an empty object', () => { typeCheckPass(PropTypes.exact({}).isRequired, {}); }); it('should warn for non specified types', () => { typeCheckFail( PropTypes.exact({}), {key: 1}, 'Warning: Failed prop type: Invalid prop `testProp` key `key` supplied to `testComponent`.' + '\nBad object: {' + '\n \"key\": 1' + '\n}' + '\nValid keys: []' ); }); it('should not warn for valid types', () => { typeCheckPass(PropTypes.exact({key: PropTypes.number}), {key: 1}); }); it('should warn for required valid types', () => { typeCheckFail( PropTypes.exact({key: PropTypes.number.isRequired}), {}, 'The prop `testProp.key` is marked as required in `testComponent`, ' + 'but its value is `undefined`.', ); }); it('should warn for the first required type', () => { typeCheckFail( PropTypes.exact({ key: PropTypes.number.isRequired, secondKey: PropTypes.number.isRequired, }), {}, 'The prop `testProp.key` is marked as required in `testComponent`, ' + 'but its value is `undefined`.', ); }); it('should warn for invalid key types', () => { typeCheckFail( PropTypes.exact({key: PropTypes.number}), {key: 'abc'}, 'Invalid prop `testProp.key` of type `string` supplied to `testComponent`, ' + 'expected `number`.', ); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass( PropTypes.exact(PropTypes.exact({key: PropTypes.number})), null, ); typeCheckPass( PropTypes.exact(PropTypes.exact({key: PropTypes.number})), undefined, ); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues( PropTypes.exact({key: PropTypes.number}).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectWarningInDevelopment(PropTypes.exact({}), 'some string'); expectWarningInDevelopment(PropTypes.exact({foo: PropTypes.number}), { foo: 42, }); expectWarningInDevelopment( PropTypes.exact({key: PropTypes.number}).isRequired, null, ); expectWarningInDevelopment( PropTypes.exact({key: PropTypes.number}).isRequired, undefined, ); expectWarningInDevelopment(PropTypes.element,
); }); }); describe('Symbol Type', () => { it('should warn for non-symbol', () => { typeCheckFail( PropTypes.symbol, 'hello', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected `symbol`.', ); typeCheckFail( PropTypes.symbol, function() {}, 'Invalid prop `testProp` of type `function` supplied to ' + '`testComponent`, expected `symbol`.', ); typeCheckFail( PropTypes.symbol, { '@@toStringTag': 'Katana', }, 'Invalid prop `testProp` of type `object` supplied to ' + '`testComponent`, expected `symbol`.', ); }); it('should not warn for a polyfilled Symbol', () => { const CoreSymbol = require('core-js/library/es6/symbol'); typeCheckPass(PropTypes.symbol, CoreSymbol('core-js')); }); }); }); prop-types-15.6.2/__tests__/PropTypesDevelopmentStandalone-test.js000066400000000000000000001071411331222337000253610ustar00rootroot00000000000000/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @emails react-core */ 'use strict'; let React; let PropTypes; function resetWarningCache() { jest.resetModules(); React = require('react'); PropTypes = require('../index'); } function getPropTypeWarningMessage(propTypes, object, componentName) { if (!console.error.calls) { spyOn(console, 'error'); } else { console.error.calls.reset(); } resetWarningCache(); PropTypes.checkPropTypes(propTypes, object, 'prop', 'testComponent'); const callCount = console.error.calls.count(); if (callCount > 1) { throw new Error('Too many warnings.'); } const message = console.error.calls.argsFor(0)[0] || null; console.error.calls.reset(); return message; } function typeCheckFail(declaration, value, expectedMessage) { const propTypes = { testProp: declaration, }; const props = { testProp: value, }; const message = getPropTypeWarningMessage(propTypes, props, 'testComponent'); expect(message).toContain(expectedMessage); } function typeCheckFailRequiredValues(declaration) { const specifiedButIsNullMsg = 'The prop `testProp` is marked as required in ' + '`testComponent`, but its value is `null`.'; const unspecifiedMsg = 'The prop `testProp` is marked as required in ' + '`testComponent`, but its value is \`undefined\`.'; const propTypes = {testProp: declaration}; // Required prop is null const message1 = getPropTypeWarningMessage( propTypes, {testProp: null}, 'testComponent', ); expect(message1).toContain(specifiedButIsNullMsg); // Required prop is undefined const message2 = getPropTypeWarningMessage( propTypes, {testProp: undefined}, 'testComponent', ); expect(message2).toContain(unspecifiedMsg); // Required prop is not a member of props object const message3 = getPropTypeWarningMessage(propTypes, {}, 'testComponent'); expect(message3).toContain(unspecifiedMsg); } function typeCheckPass(declaration, value) { const propTypes = { testProp: declaration, }; const props = { testProp: value, }; const message = getPropTypeWarningMessage(propTypes, props, 'testComponent'); expect(message).toBe(null); } function expectThrowsInDevelopment(declaration, value) { resetWarningCache(); const props = {testProp: value}; expect(() => { declaration(props, 'testProp', 'testComponent', 'prop'); }).toThrowError( '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' ); } describe('PropTypesDevelopmentStandalone', () => { beforeEach(() => { resetWarningCache(); }); describe('checkPropTypes', () => { it('should warn for invalid validators', () => { spyOn(console, 'error') const propTypes = { foo: undefined }; const props = { foo: 'foo' }; PropTypes.checkPropTypes( propTypes, props, 'prop', 'testComponent', null, ); expect(console.error.calls.argsFor(0)[0]).toEqual( 'Warning: Failed prop type: testComponent: prop type `foo` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `undefined`.' ); }); it('does not return a value from a validator', () => { spyOn(console, 'error'); const propTypes = { foo(props, propName, componentName) { return new Error('some error'); }, }; const props = {foo: 'foo'}; const returnValue = PropTypes.checkPropTypes( propTypes, props, 'prop', 'testComponent', null, ); expect(console.error.calls.argsFor(0)[0]).toContain('some error'); expect(returnValue).toBe(undefined); }); it('does not throw if validator throws', () => { spyOn(console, 'error'); const propTypes = { foo(props, propName, componentName) { throw new Error('some error'); }, }; const props = {foo: 'foo'}; const returnValue = PropTypes.checkPropTypes( propTypes, props, 'prop', 'testComponent', null, ); expect(console.error.calls.argsFor(0)[0]).toContain('some error'); expect(returnValue).toBe(undefined); }); it('warns if any of the propTypes is not a function', () => { spyOn(console, 'error'); const propTypes = { foo: PropTypes.invalid_type, }; const props = { foo: 'foo' }; const returnValue = PropTypes.checkPropTypes(propTypes, props, 'prop', 'testComponent', null); expect(console.error.calls.argsFor(0)[0]).toEqual( 'Warning: Failed prop type: testComponent: prop type `foo` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `undefined`.' ); expect(returnValue).toBe(undefined); }); }); describe('Primitive Types', () => { it('should warn for invalid strings', () => { typeCheckFail( PropTypes.string, [], 'Invalid prop `testProp` of type `array` supplied to ' + '`testComponent`, expected `string`.', ); typeCheckFail( PropTypes.string, false, 'Invalid prop `testProp` of type `boolean` supplied to ' + '`testComponent`, expected `string`.', ); typeCheckFail( PropTypes.string, 0, 'Invalid prop `testProp` of type `number` supplied to ' + '`testComponent`, expected `string`.', ); typeCheckFail( PropTypes.string, {}, 'Invalid prop `testProp` of type `object` supplied to ' + '`testComponent`, expected `string`.', ); typeCheckFail( PropTypes.string, Symbol(), 'Invalid prop `testProp` of type `symbol` supplied to ' + '`testComponent`, expected `string`.', ); }); it('should fail date and regexp correctly', () => { typeCheckFail( PropTypes.string, new Date(), 'Invalid prop `testProp` of type `date` supplied to ' + '`testComponent`, expected `string`.', ); typeCheckFail( PropTypes.string, /please/, 'Invalid prop `testProp` of type `regexp` supplied to ' + '`testComponent`, expected `string`.', ); }); it('should not warn for valid values', () => { typeCheckPass(PropTypes.array, []); typeCheckPass(PropTypes.bool, false); typeCheckPass(PropTypes.func, function() {}); typeCheckPass(PropTypes.number, 0); typeCheckPass(PropTypes.string, ''); typeCheckPass(PropTypes.object, {}); typeCheckPass(PropTypes.object, new Date()); typeCheckPass(PropTypes.object, /please/); typeCheckPass(PropTypes.symbol, Symbol()); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.string, null); typeCheckPass(PropTypes.string, undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues(PropTypes.string.isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectThrowsInDevelopment(PropTypes.array, /please/); expectThrowsInDevelopment(PropTypes.array, []); expectThrowsInDevelopment(PropTypes.array.isRequired, /please/); expectThrowsInDevelopment(PropTypes.array.isRequired, []); expectThrowsInDevelopment(PropTypes.array.isRequired, null); expectThrowsInDevelopment(PropTypes.array.isRequired, undefined); expectThrowsInDevelopment(PropTypes.bool, []); expectThrowsInDevelopment(PropTypes.bool, true); expectThrowsInDevelopment(PropTypes.bool.isRequired, []); expectThrowsInDevelopment(PropTypes.bool.isRequired, true); expectThrowsInDevelopment(PropTypes.bool.isRequired, null); expectThrowsInDevelopment(PropTypes.bool.isRequired, undefined); expectThrowsInDevelopment(PropTypes.func, false); expectThrowsInDevelopment(PropTypes.func, function() {}); expectThrowsInDevelopment(PropTypes.func.isRequired, false); expectThrowsInDevelopment(PropTypes.func.isRequired, function() {}); expectThrowsInDevelopment(PropTypes.func.isRequired, null); expectThrowsInDevelopment(PropTypes.func.isRequired, undefined); expectThrowsInDevelopment(PropTypes.number, function() {}); expectThrowsInDevelopment(PropTypes.number, 42); expectThrowsInDevelopment(PropTypes.number.isRequired, function() {}); expectThrowsInDevelopment(PropTypes.number.isRequired, 42); expectThrowsInDevelopment(PropTypes.number.isRequired, null); expectThrowsInDevelopment(PropTypes.number.isRequired, undefined); expectThrowsInDevelopment(PropTypes.string, 0); expectThrowsInDevelopment(PropTypes.string, 'foo'); expectThrowsInDevelopment(PropTypes.string.isRequired, 0); expectThrowsInDevelopment(PropTypes.string.isRequired, 'foo'); expectThrowsInDevelopment(PropTypes.string.isRequired, null); expectThrowsInDevelopment(PropTypes.string.isRequired, undefined); expectThrowsInDevelopment(PropTypes.symbol, 0); expectThrowsInDevelopment(PropTypes.symbol, Symbol('Foo')); expectThrowsInDevelopment(PropTypes.symbol.isRequired, 0); expectThrowsInDevelopment(PropTypes.symbol.isRequired, Symbol('Foo')); expectThrowsInDevelopment(PropTypes.symbol.isRequired, null); expectThrowsInDevelopment(PropTypes.symbol.isRequired, undefined); expectThrowsInDevelopment(PropTypes.object, ''); expectThrowsInDevelopment(PropTypes.object, {foo: 'bar'}); expectThrowsInDevelopment(PropTypes.object.isRequired, ''); expectThrowsInDevelopment(PropTypes.object.isRequired, {foo: 'bar'}); expectThrowsInDevelopment(PropTypes.object.isRequired, null); expectThrowsInDevelopment(PropTypes.object.isRequired, undefined); }); }); describe('Any type', () => { it('should should accept any value', () => { typeCheckPass(PropTypes.any, 0); typeCheckPass(PropTypes.any, 'str'); typeCheckPass(PropTypes.any, []); typeCheckPass(PropTypes.any, Symbol()); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.any, null); typeCheckPass(PropTypes.any, undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues(PropTypes.any.isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectThrowsInDevelopment(PropTypes.any, null); expectThrowsInDevelopment(PropTypes.any.isRequired, null); expectThrowsInDevelopment(PropTypes.any.isRequired, undefined); }); }); describe('ArrayOf Type', () => { it('should fail for invalid argument', () => { typeCheckFail( PropTypes.arrayOf({foo: PropTypes.string}), {foo: 'bar'}, 'Property `testProp` of component `testComponent` has invalid PropType notation inside arrayOf.', ); }); it('should support the arrayOf propTypes', () => { typeCheckPass(PropTypes.arrayOf(PropTypes.number), [1, 2, 3]); typeCheckPass(PropTypes.arrayOf(PropTypes.string), ['a', 'b', 'c']); typeCheckPass(PropTypes.arrayOf(PropTypes.oneOf(['a', 'b'])), ['a', 'b']); typeCheckPass(PropTypes.arrayOf(PropTypes.symbol), [Symbol(), Symbol()]); }); it('should support arrayOf with complex types', () => { typeCheckPass( PropTypes.arrayOf(PropTypes.shape({a: PropTypes.number.isRequired})), [{a: 1}, {a: 2}], ); function Thing() {} typeCheckPass(PropTypes.arrayOf(PropTypes.instanceOf(Thing)), [ new Thing(), new Thing(), ]); }); it('should warn with invalid items in the array', () => { typeCheckFail( PropTypes.arrayOf(PropTypes.number), [1, 2, 'b'], 'Invalid prop `testProp[2]` of type `string` supplied to ' + '`testComponent`, expected `number`.', ); }); it('should warn with invalid complex types', () => { function Thing() {} const name = Thing.name || '<>'; typeCheckFail( PropTypes.arrayOf(PropTypes.instanceOf(Thing)), [new Thing(), 'xyz'], 'Invalid prop `testProp[1]` of type `String` supplied to ' + '`testComponent`, expected instance of `' + name + '`.', ); }); it('should warn when passed something other than an array', () => { typeCheckFail( PropTypes.arrayOf(PropTypes.number), {'0': 'maybe-array', length: 1}, 'Invalid prop `testProp` of type `object` supplied to ' + '`testComponent`, expected an array.', ); typeCheckFail( PropTypes.arrayOf(PropTypes.number), 123, 'Invalid prop `testProp` of type `number` supplied to ' + '`testComponent`, expected an array.', ); typeCheckFail( PropTypes.arrayOf(PropTypes.number), 'string', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected an array.', ); }); it('should not warn when passing an empty array', () => { typeCheckPass(PropTypes.arrayOf(PropTypes.number), []); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.arrayOf(PropTypes.number), null); typeCheckPass(PropTypes.arrayOf(PropTypes.number), undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues( PropTypes.arrayOf(PropTypes.number).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectThrowsInDevelopment(PropTypes.arrayOf({foo: PropTypes.string}), { foo: 'bar', }); expectThrowsInDevelopment(PropTypes.arrayOf(PropTypes.number), [ 1, 2, 'b', ]); expectThrowsInDevelopment(PropTypes.arrayOf(PropTypes.number), { '0': 'maybe-array', length: 1, }); expectThrowsInDevelopment( PropTypes.arrayOf(PropTypes.number).isRequired, null, ); expectThrowsInDevelopment( PropTypes.arrayOf(PropTypes.number).isRequired, undefined, ); }); }); describe('Component Type', () => { it('should support components', () => { typeCheckPass(PropTypes.element,
); }); it('should not support multiple components or scalar values', () => { typeCheckFail( PropTypes.element, [
,
], 'Invalid prop `testProp` of type `array` supplied to `testComponent`, ' + 'expected a single ReactElement.', ); typeCheckFail( PropTypes.element, 123, 'Invalid prop `testProp` of type `number` supplied to `testComponent`, ' + 'expected a single ReactElement.', ); typeCheckFail( PropTypes.element, 'foo', 'Invalid prop `testProp` of type `string` supplied to `testComponent`, ' + 'expected a single ReactElement.', ); typeCheckFail( PropTypes.element, false, 'Invalid prop `testProp` of type `boolean` supplied to `testComponent`, ' + 'expected a single ReactElement.', ); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.element, null); typeCheckPass(PropTypes.element, undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues(PropTypes.element.isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectThrowsInDevelopment(PropTypes.element, [
,
]); expectThrowsInDevelopment(PropTypes.element,
); expectThrowsInDevelopment(PropTypes.element, 123); expectThrowsInDevelopment(PropTypes.element, 'foo'); expectThrowsInDevelopment(PropTypes.element, false); expectThrowsInDevelopment(PropTypes.element.isRequired, null); expectThrowsInDevelopment(PropTypes.element.isRequired, undefined); }); }); describe('Instance Types', () => { it('should warn for invalid instances', () => { function Person() {} function Cat() {} const personName = Person.name || '<>'; const dateName = Date.name || '<>'; const regExpName = RegExp.name || '<>'; typeCheckFail( PropTypes.instanceOf(Person), false, 'Invalid prop `testProp` of type `Boolean` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); typeCheckFail( PropTypes.instanceOf(Person), {}, 'Invalid prop `testProp` of type `Object` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); typeCheckFail( PropTypes.instanceOf(Person), '', 'Invalid prop `testProp` of type `String` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); typeCheckFail( PropTypes.instanceOf(Date), {}, 'Invalid prop `testProp` of type `Object` supplied to ' + '`testComponent`, expected instance of `' + dateName + '`.', ); typeCheckFail( PropTypes.instanceOf(RegExp), {}, 'Invalid prop `testProp` of type `Object` supplied to ' + '`testComponent`, expected instance of `' + regExpName + '`.', ); typeCheckFail( PropTypes.instanceOf(Person), new Cat(), 'Invalid prop `testProp` of type `Cat` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); typeCheckFail( PropTypes.instanceOf(Person), Object.create(null), 'Invalid prop `testProp` of type `<>` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); }); it('should not warn for valid values', () => { function Person() {} function Engineer() {} Engineer.prototype = new Person(); typeCheckPass(PropTypes.instanceOf(Person), new Person()); typeCheckPass(PropTypes.instanceOf(Person), new Engineer()); typeCheckPass(PropTypes.instanceOf(Date), new Date()); typeCheckPass(PropTypes.instanceOf(RegExp), /please/); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.instanceOf(String), null); typeCheckPass(PropTypes.instanceOf(String), undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues(PropTypes.instanceOf(String).isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectThrowsInDevelopment(PropTypes.instanceOf(Date), {}); expectThrowsInDevelopment(PropTypes.instanceOf(Date), new Date()); expectThrowsInDevelopment(PropTypes.instanceOf(Date).isRequired, {}); expectThrowsInDevelopment( PropTypes.instanceOf(Date).isRequired, new Date(), ); }); }); describe('React Component Types', () => { it('should warn for invalid values', () => { const failMessage = 'Invalid prop `testProp` supplied to ' + '`testComponent`, expected a ReactNode.'; typeCheckFail(PropTypes.node, true, failMessage); typeCheckFail(PropTypes.node, function() {}, failMessage); typeCheckFail(PropTypes.node, {key: function() {}}, failMessage); typeCheckFail(PropTypes.node, {key:
}, failMessage); }); it('should not warn for valid values', () => { function MyComponent() {} MyComponent.prototype.render = function() { return
; }; typeCheckPass(PropTypes.node,
); typeCheckPass(PropTypes.node, false); typeCheckPass(PropTypes.node, ); typeCheckPass(PropTypes.node, 'Some string'); typeCheckPass(PropTypes.node, []); typeCheckPass(PropTypes.node, [ 123, 'Some string',
, ['Another string', [456], , ], , null, undefined, ]); }); it('should not warn for iterables', () => { function MyComponent() {} MyComponent.prototype.render = function() { return
; }; const iterable = { '@@iterator': function() { let i = 0; return { next: function() { const done = ++i > 2; return {value: done ? undefined : , done: done}; }, }; }, }; typeCheckPass(PropTypes.node, iterable); }); it('should not warn for entry iterables', () => { function MyComponent() {} MyComponent.prototype.render = function() { return
; }; const iterable = { '@@iterator': function() { let i = 0; return { next: function() { const done = ++i > 2; return { value: done ? undefined : ['#' + i, ], done: done, }; }, }; }, }; iterable.entries = iterable['@@iterator']; typeCheckPass(PropTypes.node, iterable); }); it('should not warn for null/undefined if not required', () => { typeCheckPass(PropTypes.node, null); typeCheckPass(PropTypes.node, undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues(PropTypes.node.isRequired); }); it('should accept empty array for required props', () => { typeCheckPass(PropTypes.node.isRequired, []); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectThrowsInDevelopment(PropTypes.node, 'node'); expectThrowsInDevelopment(PropTypes.node, {}); expectThrowsInDevelopment(PropTypes.node.isRequired, 'node'); expectThrowsInDevelopment(PropTypes.node.isRequired, undefined); expectThrowsInDevelopment(PropTypes.node.isRequired, undefined); }); }); describe('ObjectOf Type', () => { it('should fail for invalid argument', () => { typeCheckFail( PropTypes.objectOf({foo: PropTypes.string}), {foo: 'bar'}, 'Property `testProp` of component `testComponent` has invalid PropType notation inside objectOf.', ); }); it('should support the objectOf propTypes', () => { typeCheckPass(PropTypes.objectOf(PropTypes.number), {a: 1, b: 2, c: 3}); typeCheckPass(PropTypes.objectOf(PropTypes.string), { a: 'a', b: 'b', c: 'c', }); typeCheckPass(PropTypes.objectOf(PropTypes.oneOf(['a', 'b'])), { a: 'a', b: 'b', }); typeCheckPass(PropTypes.objectOf(PropTypes.symbol), { a: Symbol(), b: Symbol(), c: Symbol(), }); }); it('should support objectOf with complex types', () => { typeCheckPass( PropTypes.objectOf(PropTypes.shape({a: PropTypes.number.isRequired})), {a: {a: 1}, b: {a: 2}}, ); function Thing() {} typeCheckPass(PropTypes.objectOf(PropTypes.instanceOf(Thing)), { a: new Thing(), b: new Thing(), }); }); it('should warn with invalid items in the object', () => { typeCheckFail( PropTypes.objectOf(PropTypes.number), {a: 1, b: 2, c: 'b'}, 'Invalid prop `testProp.c` of type `string` supplied to `testComponent`, ' + 'expected `number`.', ); }); it('should warn with invalid complex types', () => { function Thing() {} const name = Thing.name || '<>'; typeCheckFail( PropTypes.objectOf(PropTypes.instanceOf(Thing)), {a: new Thing(), b: 'xyz'}, 'Invalid prop `testProp.b` of type `String` supplied to ' + '`testComponent`, expected instance of `' + name + '`.', ); }); it('should warn when passed something other than an object', () => { typeCheckFail( PropTypes.objectOf(PropTypes.number), [1, 2], 'Invalid prop `testProp` of type `array` supplied to ' + '`testComponent`, expected an object.', ); typeCheckFail( PropTypes.objectOf(PropTypes.number), 123, 'Invalid prop `testProp` of type `number` supplied to ' + '`testComponent`, expected an object.', ); typeCheckFail( PropTypes.objectOf(PropTypes.number), 'string', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected an object.', ); typeCheckFail( PropTypes.objectOf(PropTypes.symbol), Symbol(), 'Invalid prop `testProp` of type `symbol` supplied to ' + '`testComponent`, expected an object.', ); }); it('should not warn when passing an empty object', () => { typeCheckPass(PropTypes.objectOf(PropTypes.number), {}); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.objectOf(PropTypes.number), null); typeCheckPass(PropTypes.objectOf(PropTypes.number), undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues( PropTypes.objectOf(PropTypes.number).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectThrowsInDevelopment(PropTypes.objectOf({foo: PropTypes.string}), { foo: 'bar', }); expectThrowsInDevelopment(PropTypes.objectOf(PropTypes.number), { a: 1, b: 2, c: 'b', }); expectThrowsInDevelopment(PropTypes.objectOf(PropTypes.number), [1, 2]); expectThrowsInDevelopment(PropTypes.objectOf(PropTypes.number), null); expectThrowsInDevelopment( PropTypes.objectOf(PropTypes.number), undefined, ); }); }); describe('OneOf Types', () => { it('should warn but not error for invalid argument', () => { spyOn(console, 'error'); PropTypes.oneOf('red', 'blue'); expect(console.error).toHaveBeenCalled(); expect(console.error.calls.argsFor(0)[0]).toContain( 'Invalid argument supplied to oneOf, expected an instance of array.', ); typeCheckPass(PropTypes.oneOf('red', 'blue'), 'red'); }); it('should warn for invalid values', () => { typeCheckFail( PropTypes.oneOf(['red', 'blue']), true, 'Invalid prop `testProp` of value `true` supplied to ' + '`testComponent`, expected one of ["red","blue"].', ); typeCheckFail( PropTypes.oneOf(['red', 'blue']), [], 'Invalid prop `testProp` of value `` supplied to `testComponent`, ' + 'expected one of ["red","blue"].', ); typeCheckFail( PropTypes.oneOf(['red', 'blue']), '', 'Invalid prop `testProp` of value `` supplied to `testComponent`, ' + 'expected one of ["red","blue"].', ); typeCheckFail( PropTypes.oneOf([0, 'false']), false, 'Invalid prop `testProp` of value `false` supplied to ' + '`testComponent`, expected one of [0,"false"].', ); }); it('should not warn for valid values', () => { typeCheckPass(PropTypes.oneOf(['red', 'blue']), 'red'); typeCheckPass(PropTypes.oneOf(['red', 'blue']), 'blue'); typeCheckPass(PropTypes.oneOf(['red', 'blue', NaN]), NaN); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass(PropTypes.oneOf(['red', 'blue']), null); typeCheckPass(PropTypes.oneOf(['red', 'blue']), undefined); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues(PropTypes.oneOf(['red', 'blue']).isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectThrowsInDevelopment(PropTypes.oneOf(['red', 'blue']), true); expectThrowsInDevelopment(PropTypes.oneOf(['red', 'blue']), null); expectThrowsInDevelopment(PropTypes.oneOf(['red', 'blue']), undefined); }); }); describe('Union Types', () => { it('should warn but not error for invalid argument', () => { spyOn(console, 'error'); PropTypes.oneOfType(PropTypes.string, PropTypes.number); expect(console.error).toHaveBeenCalled(); expect(console.error.calls.argsFor(0)[0]).toContain( 'Invalid argument supplied to oneOfType, expected an instance of array.', ); typeCheckPass(PropTypes.oneOf(PropTypes.string, PropTypes.number), []); }); it('should warn but for invalid argument type', () => { spyOn(console, 'error'); const types = [undefined, null, false, new Date, /foo/, {}]; const expected = ['undefined', 'null', 'a boolean', 'a date', 'a regexp', 'an object']; for (let i = 0; i < expected.length; i++) { const type = types[i]; PropTypes.oneOfType([type]); expect(console.error).toHaveBeenCalled(); expect(console.error.calls.argsFor(0)[0]).toContain( 'Invalid argument supplied to oneOfType. Expected an array of check functions, ' + 'but received ' + expected[i] + ' at index 0.' ); console.error.calls.reset(); } typeCheckPass(PropTypes.oneOf(PropTypes.string, PropTypes.number), []); }); it('should warn if none of the types are valid', () => { typeCheckFail( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), [], 'Invalid prop `testProp` supplied to `testComponent`.', ); const checker = PropTypes.oneOfType([ PropTypes.shape({a: PropTypes.number.isRequired}), PropTypes.shape({b: PropTypes.number.isRequired}), ]); typeCheckFail( checker, {c: 1}, 'Invalid prop `testProp` supplied to `testComponent`.', ); }); it('should not warn if one of the types are valid', () => { let checker = PropTypes.oneOfType([PropTypes.string, PropTypes.number]); typeCheckPass(checker, null); typeCheckPass(checker, 'foo'); typeCheckPass(checker, 123); checker = PropTypes.oneOfType([ PropTypes.shape({a: PropTypes.number.isRequired}), PropTypes.shape({b: PropTypes.number.isRequired}), ]); typeCheckPass(checker, {a: 1}); typeCheckPass(checker, {b: 1}); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), null, ); typeCheckPass( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), undefined, ); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues( PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectThrowsInDevelopment( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), [], ); expectThrowsInDevelopment( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), null, ); expectThrowsInDevelopment( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), undefined, ); }); }); describe('Shape Types', () => { it('should warn for non objects', () => { typeCheckFail( PropTypes.shape({}), 'some string', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected `object`.', ); typeCheckFail( PropTypes.shape({}), ['array'], 'Invalid prop `testProp` of type `array` supplied to ' + '`testComponent`, expected `object`.', ); }); it('should not warn for empty values', () => { typeCheckPass(PropTypes.shape({}), undefined); typeCheckPass(PropTypes.shape({}), null); typeCheckPass(PropTypes.shape({}), {}); }); it('should not warn for an empty object', () => { typeCheckPass(PropTypes.shape({}).isRequired, {}); }); it('should not warn for non specified types', () => { typeCheckPass(PropTypes.shape({}), {key: 1}); }); it('should not warn for valid types', () => { typeCheckPass(PropTypes.shape({key: PropTypes.number}), {key: 1}); }); it('should warn for required valid types', () => { typeCheckFail( PropTypes.shape({key: PropTypes.number.isRequired}), {}, 'The prop `testProp.key` is marked as required in `testComponent`, ' + 'but its value is `undefined`.', ); }); it('should warn for the first required type', () => { typeCheckFail( PropTypes.shape({ key: PropTypes.number.isRequired, secondKey: PropTypes.number.isRequired, }), {}, 'The prop `testProp.key` is marked as required in `testComponent`, ' + 'but its value is `undefined`.', ); }); it('should warn for invalid key types', () => { typeCheckFail( PropTypes.shape({key: PropTypes.number}), {key: 'abc'}, 'Invalid prop `testProp.key` of type `string` supplied to `testComponent`, ' + 'expected `number`.', ); }); it('should be implicitly optional and not warn without values', () => { typeCheckPass( PropTypes.shape(PropTypes.shape({key: PropTypes.number})), null, ); typeCheckPass( PropTypes.shape(PropTypes.shape({key: PropTypes.number})), undefined, ); }); it('should warn for missing required values', () => { typeCheckFailRequiredValues( PropTypes.shape({key: PropTypes.number}).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectThrowsInDevelopment(PropTypes.shape({}), 'some string'); expectThrowsInDevelopment(PropTypes.shape({foo: PropTypes.number}), { foo: 42, }); expectThrowsInDevelopment( PropTypes.shape({key: PropTypes.number}).isRequired, null, ); expectThrowsInDevelopment( PropTypes.shape({key: PropTypes.number}).isRequired, undefined, ); expectThrowsInDevelopment(PropTypes.element,
); }); }); describe('Symbol Type', () => { it('should warn for non-symbol', () => { typeCheckFail( PropTypes.symbol, 'hello', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected `symbol`.', ); typeCheckFail( PropTypes.symbol, function() {}, 'Invalid prop `testProp` of type `function` supplied to ' + '`testComponent`, expected `symbol`.', ); typeCheckFail( PropTypes.symbol, { '@@toStringTag': 'Katana', }, 'Invalid prop `testProp` of type `object` supplied to ' + '`testComponent`, expected `symbol`.', ); }); it('should not warn for a polyfilled Symbol', () => { const CoreSymbol = require('core-js/library/es6/symbol'); typeCheckPass(PropTypes.symbol, CoreSymbol('core-js')); }); }); }); prop-types-15.6.2/__tests__/PropTypesProductionReact15-test.js000066400000000000000000000727051331222337000243500ustar00rootroot00000000000000/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @emails react-core */ 'use strict'; let React; let PropTypes; function resetWarningCache() { jest.resetModules(); // Set production mode throughout this test. process.env.NODE_ENV = 'production'; React = require('react'); // We are testing that when imported in the same way React 15 imports `prop-types`, // it just suppresses warnings but doesn't actually throw when calling validators. PropTypes = require('../factory')(React.isValidElement); } function expectNoop(declaration, value) { if (!console.error.calls) { spyOn(console, 'error'); } else { console.error.calls.reset(); } const props = {testProp: value}; const propName = 'testProp' + Math.random().toString(); const componentName = 'testComponent' + Math.random().toString(); // Try calling it manually for (let i = 0; i < 3; i++) { declaration(props, propName, componentName, 'prop'); } // Try calling it via checkPropTypes const propTypes = { testProp: declaration, }; PropTypes.checkPropTypes(propTypes, props, 'prop', 'testComponent'); // They should all be no-ops expect(console.error.calls.count()).toBe(0); console.error.calls.reset(); } describe('PropTypesProductionReact15', () => { beforeEach(() => { resetWarningCache(); }); describe('Primitive Types', () => { it('should warn for invalid strings', () => { expectNoop( PropTypes.string, [], 'Invalid prop `testProp` of type `array` supplied to ' + '`testComponent`, expected `string`.', ); expectNoop( PropTypes.string, false, 'Invalid prop `testProp` of type `boolean` supplied to ' + '`testComponent`, expected `string`.', ); expectNoop( PropTypes.string, 0, 'Invalid prop `testProp` of type `number` supplied to ' + '`testComponent`, expected `string`.', ); expectNoop( PropTypes.string, {}, 'Invalid prop `testProp` of type `object` supplied to ' + '`testComponent`, expected `string`.', ); expectNoop( PropTypes.string, Symbol(), 'Invalid prop `testProp` of type `symbol` supplied to ' + '`testComponent`, expected `string`.', ); }); it('should fail date and regexp correctly', () => { expectNoop( PropTypes.string, new Date(), 'Invalid prop `testProp` of type `date` supplied to ' + '`testComponent`, expected `string`.', ); expectNoop( PropTypes.string, /please/, 'Invalid prop `testProp` of type `regexp` supplied to ' + '`testComponent`, expected `string`.', ); }); it('should not warn for valid values', () => { expectNoop(PropTypes.array, []); expectNoop(PropTypes.bool, false); expectNoop(PropTypes.func, function() {}); expectNoop(PropTypes.number, 0); expectNoop(PropTypes.string, ''); expectNoop(PropTypes.object, {}); expectNoop(PropTypes.object, new Date()); expectNoop(PropTypes.object, /please/); expectNoop(PropTypes.symbol, Symbol()); }); it('should be implicitly optional and not warn without values', () => { expectNoop(PropTypes.string, null); expectNoop(PropTypes.string, undefined); }); it('should warn for missing required values', () => { expectNoop(PropTypes.string.isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectNoop(PropTypes.array, /please/); expectNoop(PropTypes.array, []); expectNoop(PropTypes.array.isRequired, /please/); expectNoop(PropTypes.array.isRequired, []); expectNoop(PropTypes.array.isRequired, null); expectNoop(PropTypes.array.isRequired, undefined); expectNoop(PropTypes.bool, []); expectNoop(PropTypes.bool, true); expectNoop(PropTypes.bool.isRequired, []); expectNoop(PropTypes.bool.isRequired, true); expectNoop(PropTypes.bool.isRequired, null); expectNoop(PropTypes.bool.isRequired, undefined); expectNoop(PropTypes.func, false); expectNoop(PropTypes.func, function() {}); expectNoop(PropTypes.func.isRequired, false); expectNoop(PropTypes.func.isRequired, function() {}); expectNoop(PropTypes.func.isRequired, null); expectNoop(PropTypes.func.isRequired, undefined); expectNoop(PropTypes.number, function() {}); expectNoop(PropTypes.number, 42); expectNoop(PropTypes.number.isRequired, function() {}); expectNoop(PropTypes.number.isRequired, 42); expectNoop(PropTypes.number.isRequired, null); expectNoop(PropTypes.number.isRequired, undefined); expectNoop(PropTypes.string, 0); expectNoop(PropTypes.string, 'foo'); expectNoop(PropTypes.string.isRequired, 0); expectNoop(PropTypes.string.isRequired, 'foo'); expectNoop(PropTypes.string.isRequired, null); expectNoop(PropTypes.string.isRequired, undefined); expectNoop(PropTypes.symbol, 0); expectNoop(PropTypes.symbol, Symbol('Foo')); expectNoop(PropTypes.symbol.isRequired, 0); expectNoop(PropTypes.symbol.isRequired, Symbol('Foo')); expectNoop(PropTypes.symbol.isRequired, null); expectNoop(PropTypes.symbol.isRequired, undefined); expectNoop(PropTypes.object, ''); expectNoop(PropTypes.object, {foo: 'bar'}); expectNoop(PropTypes.object.isRequired, ''); expectNoop(PropTypes.object.isRequired, {foo: 'bar'}); expectNoop(PropTypes.object.isRequired, null); expectNoop(PropTypes.object.isRequired, undefined); }); }); describe('Any type', () => { it('should should accept any value', () => { expectNoop(PropTypes.any, 0); expectNoop(PropTypes.any, 'str'); expectNoop(PropTypes.any, []); expectNoop(PropTypes.any, Symbol()); }); it('should be implicitly optional and not warn without values', () => { expectNoop(PropTypes.any, null); expectNoop(PropTypes.any, undefined); }); it('should warn for missing required values', () => { expectNoop(PropTypes.any.isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectNoop(PropTypes.any, null); expectNoop(PropTypes.any.isRequired, null); expectNoop(PropTypes.any.isRequired, undefined); }); }); describe('ArrayOf Type', () => { it('should fail for invalid argument', () => { expectNoop( PropTypes.arrayOf({foo: PropTypes.string}), {foo: 'bar'}, 'Property `testProp` of component `testComponent` has invalid PropType notation inside arrayOf.', ); }); it('should support the arrayOf propTypes', () => { expectNoop(PropTypes.arrayOf(PropTypes.number), [1, 2, 3]); expectNoop(PropTypes.arrayOf(PropTypes.string), ['a', 'b', 'c']); expectNoop(PropTypes.arrayOf(PropTypes.oneOf(['a', 'b'])), ['a', 'b']); expectNoop(PropTypes.arrayOf(PropTypes.symbol), [Symbol(), Symbol()]); }); it('should support arrayOf with complex types', () => { expectNoop( PropTypes.arrayOf(PropTypes.shape({a: PropTypes.number.isRequired})), [{a: 1}, {a: 2}], ); function Thing() {} expectNoop(PropTypes.arrayOf(PropTypes.instanceOf(Thing)), [ new Thing(), new Thing(), ]); }); it('should warn with invalid items in the array', () => { expectNoop( PropTypes.arrayOf(PropTypes.number), [1, 2, 'b'], 'Invalid prop `testProp[2]` of type `string` supplied to ' + '`testComponent`, expected `number`.', ); }); it('should warn with invalid complex types', () => { function Thing() {} const name = Thing.name || '<>'; expectNoop( PropTypes.arrayOf(PropTypes.instanceOf(Thing)), [new Thing(), 'xyz'], 'Invalid prop `testProp[1]` of type `String` supplied to ' + '`testComponent`, expected instance of `' + name + '`.', ); }); it('should warn when passed something other than an array', () => { expectNoop( PropTypes.arrayOf(PropTypes.number), {'0': 'maybe-array', length: 1}, 'Invalid prop `testProp` of type `object` supplied to ' + '`testComponent`, expected an array.', ); expectNoop( PropTypes.arrayOf(PropTypes.number), 123, 'Invalid prop `testProp` of type `number` supplied to ' + '`testComponent`, expected an array.', ); expectNoop( PropTypes.arrayOf(PropTypes.number), 'string', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected an array.', ); }); it('should not warn when passing an empty array', () => { expectNoop(PropTypes.arrayOf(PropTypes.number), []); }); it('should be implicitly optional and not warn without values', () => { expectNoop(PropTypes.arrayOf(PropTypes.number), null); expectNoop(PropTypes.arrayOf(PropTypes.number), undefined); }); it('should warn for missing required values', () => { expectNoop( PropTypes.arrayOf(PropTypes.number).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectNoop(PropTypes.arrayOf({foo: PropTypes.string}), { foo: 'bar', }); expectNoop(PropTypes.arrayOf(PropTypes.number), [ 1, 2, 'b', ]); expectNoop(PropTypes.arrayOf(PropTypes.number), { '0': 'maybe-array', length: 1, }); expectNoop( PropTypes.arrayOf(PropTypes.number).isRequired, null, ); expectNoop( PropTypes.arrayOf(PropTypes.number).isRequired, undefined, ); }); }); describe('Component Type', () => { it('should support components', () => { expectNoop(PropTypes.element,
); }); it('should not support multiple components or scalar values', () => { expectNoop( PropTypes.element, [
,
], 'Invalid prop `testProp` of type `array` supplied to `testComponent`, ' + 'expected a single ReactElement.', ); expectNoop( PropTypes.element, 123, 'Invalid prop `testProp` of type `number` supplied to `testComponent`, ' + 'expected a single ReactElement.', ); expectNoop( PropTypes.element, 'foo', 'Invalid prop `testProp` of type `string` supplied to `testComponent`, ' + 'expected a single ReactElement.', ); expectNoop( PropTypes.element, false, 'Invalid prop `testProp` of type `boolean` supplied to `testComponent`, ' + 'expected a single ReactElement.', ); }); it('should be implicitly optional and not warn without values', () => { expectNoop(PropTypes.element, null); expectNoop(PropTypes.element, undefined); }); it('should warn for missing required values', () => { expectNoop(PropTypes.element.isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectNoop(PropTypes.element, [
,
]); expectNoop(PropTypes.element,
); expectNoop(PropTypes.element, 123); expectNoop(PropTypes.element, 'foo'); expectNoop(PropTypes.element, false); expectNoop(PropTypes.element.isRequired, null); expectNoop(PropTypes.element.isRequired, undefined); }); }); describe('Instance Types', () => { it('should warn for invalid instances', () => { function Person() {} function Cat() {} const personName = Person.name || '<>'; const dateName = Date.name || '<>'; const regExpName = RegExp.name || '<>'; expectNoop( PropTypes.instanceOf(Person), false, 'Invalid prop `testProp` of type `Boolean` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); expectNoop( PropTypes.instanceOf(Person), {}, 'Invalid prop `testProp` of type `Object` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); expectNoop( PropTypes.instanceOf(Person), '', 'Invalid prop `testProp` of type `String` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); expectNoop( PropTypes.instanceOf(Date), {}, 'Invalid prop `testProp` of type `Object` supplied to ' + '`testComponent`, expected instance of `' + dateName + '`.', ); expectNoop( PropTypes.instanceOf(RegExp), {}, 'Invalid prop `testProp` of type `Object` supplied to ' + '`testComponent`, expected instance of `' + regExpName + '`.', ); expectNoop( PropTypes.instanceOf(Person), new Cat(), 'Invalid prop `testProp` of type `Cat` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); expectNoop( PropTypes.instanceOf(Person), Object.create(null), 'Invalid prop `testProp` of type `<>` supplied to ' + '`testComponent`, expected instance of `' + personName + '`.', ); }); it('should not warn for valid values', () => { function Person() {} function Engineer() {} Engineer.prototype = new Person(); expectNoop(PropTypes.instanceOf(Person), new Person()); expectNoop(PropTypes.instanceOf(Person), new Engineer()); expectNoop(PropTypes.instanceOf(Date), new Date()); expectNoop(PropTypes.instanceOf(RegExp), /please/); }); it('should be implicitly optional and not warn without values', () => { expectNoop(PropTypes.instanceOf(String), null); expectNoop(PropTypes.instanceOf(String), undefined); }); it('should warn for missing required values', () => { expectNoop(PropTypes.instanceOf(String).isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectNoop(PropTypes.instanceOf(Date), {}); expectNoop(PropTypes.instanceOf(Date), new Date()); expectNoop(PropTypes.instanceOf(Date).isRequired, {}); expectNoop( PropTypes.instanceOf(Date).isRequired, new Date(), ); }); }); describe('React Component Types', () => { it('should warn for invalid values', () => { const failMessage = 'Invalid prop `testProp` supplied to ' + '`testComponent`, expected a ReactNode.'; expectNoop(PropTypes.node, true, failMessage); expectNoop(PropTypes.node, function() {}, failMessage); expectNoop(PropTypes.node, {key: function() {}}, failMessage); expectNoop(PropTypes.node, {key:
}, failMessage); }); it('should not warn for valid values', () => { function MyComponent() {} MyComponent.prototype.render = function() { return
; }; expectNoop(PropTypes.node,
); expectNoop(PropTypes.node, false); expectNoop(PropTypes.node, ); expectNoop(PropTypes.node, 'Some string'); expectNoop(PropTypes.node, []); expectNoop(PropTypes.node, [ 123, 'Some string',
, ['Another string', [456], , ], , null, undefined, ]); }); it('should not warn for iterables', () => { function MyComponent() {} MyComponent.prototype.render = function() { return
; }; const iterable = { '@@iterator': function() { const i = 0; return { next: function() { const done = ++i > 2; return {value: done ? undefined : , done: done}; }, }; }, }; expectNoop(PropTypes.node, iterable); }); it('should not warn for entry iterables', () => { function MyComponent() {} MyComponent.prototype.render = function() { return
; }; const iterable = { '@@iterator': function() { const i = 0; return { next: function() { const done = ++i > 2; return { value: done ? undefined : ['#' + i, ], done: done, }; }, }; }, }; iterable.entries = iterable['@@iterator']; expectNoop(PropTypes.node, iterable); }); it('should not warn for null/undefined if not required', () => { expectNoop(PropTypes.node, null); expectNoop(PropTypes.node, undefined); }); it('should warn for missing required values', () => { expectNoop(PropTypes.node.isRequired); }); it('should accept empty array for required props', () => { expectNoop(PropTypes.node.isRequired, []); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectNoop(PropTypes.node, 'node'); expectNoop(PropTypes.node, {}); expectNoop(PropTypes.node.isRequired, 'node'); expectNoop(PropTypes.node.isRequired, undefined); expectNoop(PropTypes.node.isRequired, undefined); }); }); describe('ObjectOf Type', () => { it('should fail for invalid argument', () => { expectNoop( PropTypes.objectOf({foo: PropTypes.string}), {foo: 'bar'}, 'Property `testProp` of component `testComponent` has invalid PropType notation inside objectOf.', ); }); it('should support the objectOf propTypes', () => { expectNoop(PropTypes.objectOf(PropTypes.number), {a: 1, b: 2, c: 3}); expectNoop(PropTypes.objectOf(PropTypes.string), { a: 'a', b: 'b', c: 'c', }); expectNoop(PropTypes.objectOf(PropTypes.oneOf(['a', 'b'])), { a: 'a', b: 'b', }); expectNoop(PropTypes.objectOf(PropTypes.symbol), { a: Symbol(), b: Symbol(), c: Symbol(), }); }); it('should support objectOf with complex types', () => { expectNoop( PropTypes.objectOf(PropTypes.shape({a: PropTypes.number.isRequired})), {a: {a: 1}, b: {a: 2}}, ); function Thing() {} expectNoop(PropTypes.objectOf(PropTypes.instanceOf(Thing)), { a: new Thing(), b: new Thing(), }); }); it('should warn with invalid items in the object', () => { expectNoop( PropTypes.objectOf(PropTypes.number), {a: 1, b: 2, c: 'b'}, 'Invalid prop `testProp.c` of type `string` supplied to `testComponent`, ' + 'expected `number`.', ); }); it('should warn with invalid complex types', () => { function Thing() {} const name = Thing.name || '<>'; expectNoop( PropTypes.objectOf(PropTypes.instanceOf(Thing)), {a: new Thing(), b: 'xyz'}, 'Invalid prop `testProp.b` of type `String` supplied to ' + '`testComponent`, expected instance of `' + name + '`.', ); }); it('should warn when passed something other than an object', () => { expectNoop( PropTypes.objectOf(PropTypes.number), [1, 2], 'Invalid prop `testProp` of type `array` supplied to ' + '`testComponent`, expected an object.', ); expectNoop( PropTypes.objectOf(PropTypes.number), 123, 'Invalid prop `testProp` of type `number` supplied to ' + '`testComponent`, expected an object.', ); expectNoop( PropTypes.objectOf(PropTypes.number), 'string', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected an object.', ); expectNoop( PropTypes.objectOf(PropTypes.symbol), Symbol(), 'Invalid prop `testProp` of type `symbol` supplied to ' + '`testComponent`, expected an object.', ); }); it('should not warn when passing an empty object', () => { expectNoop(PropTypes.objectOf(PropTypes.number), {}); }); it('should be implicitly optional and not warn without values', () => { expectNoop(PropTypes.objectOf(PropTypes.number), null); expectNoop(PropTypes.objectOf(PropTypes.number), undefined); }); it('should warn for missing required values', () => { expectNoop( PropTypes.objectOf(PropTypes.number).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectNoop(PropTypes.objectOf({foo: PropTypes.string}), { foo: 'bar', }); expectNoop(PropTypes.objectOf(PropTypes.number), { a: 1, b: 2, c: 'b', }); expectNoop(PropTypes.objectOf(PropTypes.number), [1, 2]); expectNoop(PropTypes.objectOf(PropTypes.number), null); expectNoop( PropTypes.objectOf(PropTypes.number), undefined, ); }); }); describe('OneOf Types', () => { it('should ignore invalid argument', () => { spyOn(console, 'error'); PropTypes.oneOf('red', 'blue'); expect(console.error).not.toHaveBeenCalled(); expectNoop(PropTypes.oneOf('red', 'blue'), 'red'); }); it('should ignore invalid values', () => { expectNoop( PropTypes.oneOf(['red', 'blue']), true, 'Invalid prop `testProp` of value `true` supplied to ' + '`testComponent`, expected one of ["red","blue"].', ); expectNoop( PropTypes.oneOf(['red', 'blue']), [], 'Invalid prop `testProp` of value `` supplied to `testComponent`, ' + 'expected one of ["red","blue"].', ); expectNoop( PropTypes.oneOf(['red', 'blue']), '', 'Invalid prop `testProp` of value `` supplied to `testComponent`, ' + 'expected one of ["red","blue"].', ); expectNoop( PropTypes.oneOf([0, 'false']), false, 'Invalid prop `testProp` of value `false` supplied to ' + '`testComponent`, expected one of [0,"false"].', ); }); it('should not warn for valid values', () => { expectNoop(PropTypes.oneOf(['red', 'blue']), 'red'); expectNoop(PropTypes.oneOf(['red', 'blue']), 'blue'); expectNoop(PropTypes.oneOf(['red', 'blue', NaN]), NaN); }); it('should be implicitly optional and not warn without values', () => { expectNoop(PropTypes.oneOf(['red', 'blue']), null); expectNoop(PropTypes.oneOf(['red', 'blue']), undefined); }); it('should warn for missing required values', () => { expectNoop(PropTypes.oneOf(['red', 'blue']).isRequired); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectNoop(PropTypes.oneOf(['red', 'blue']), true); expectNoop(PropTypes.oneOf(['red', 'blue']), null); expectNoop(PropTypes.oneOf(['red', 'blue']), undefined); }); }); describe('Union Types', () => { it('should ignore invalid argument', () => { spyOn(console, 'error'); PropTypes.oneOfType(PropTypes.string, PropTypes.number); expect(console.error).not.toHaveBeenCalled(); expectNoop(PropTypes.oneOf(PropTypes.string, PropTypes.number), []); }); it('should warn if none of the types are valid', () => { expectNoop( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), [], 'Invalid prop `testProp` supplied to `testComponent`.', ); const checker = PropTypes.oneOfType([ PropTypes.shape({a: PropTypes.number.isRequired}), PropTypes.shape({b: PropTypes.number.isRequired}), ]); expectNoop( checker, {c: 1}, 'Invalid prop `testProp` supplied to `testComponent`.', ); }); it('should not warn if one of the types are valid', () => { let checker = PropTypes.oneOfType([PropTypes.string, PropTypes.number]); expectNoop(checker, null); expectNoop(checker, 'foo'); expectNoop(checker, 123); checker = PropTypes.oneOfType([ PropTypes.shape({a: PropTypes.number.isRequired}), PropTypes.shape({b: PropTypes.number.isRequired}), ]); expectNoop(checker, {a: 1}); expectNoop(checker, {b: 1}); }); it('should be implicitly optional and not warn without values', () => { expectNoop( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), null, ); expectNoop( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), undefined, ); }); it('should warn for missing required values', () => { expectNoop( PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectNoop( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), [], ); expectNoop( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), null, ); expectNoop( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), undefined, ); }); it('should not warn if setup without checker function', () => { expectNoop( PropTypes.oneOfType([null]), null, ); expectNoop( PropTypes.oneOfType([undefined]), undefined, ); }); }); describe('Shape Types', () => { it('should warn for non objects', () => { expectNoop( PropTypes.shape({}), 'some string', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected `object`.', ); expectNoop( PropTypes.shape({}), ['array'], 'Invalid prop `testProp` of type `array` supplied to ' + '`testComponent`, expected `object`.', ); }); it('should not warn for empty values', () => { expectNoop(PropTypes.shape({}), undefined); expectNoop(PropTypes.shape({}), null); expectNoop(PropTypes.shape({}), {}); }); it('should not warn for an empty object', () => { expectNoop(PropTypes.shape({}).isRequired, {}); }); it('should not warn for non specified types', () => { expectNoop(PropTypes.shape({}), {key: 1}); }); it('should not warn for valid types', () => { expectNoop(PropTypes.shape({key: PropTypes.number}), {key: 1}); }); it('should warn for required valid types', () => { expectNoop( PropTypes.shape({key: PropTypes.number.isRequired}), {}, 'The prop `testProp.key` is marked as required in `testComponent`, ' + 'but its value is `undefined`.', ); }); it('should warn for the first required type', () => { expectNoop( PropTypes.shape({ key: PropTypes.number.isRequired, secondKey: PropTypes.number.isRequired, }), {}, 'The prop `testProp.key` is marked as required in `testComponent`, ' + 'but its value is `undefined`.', ); }); it('should warn for invalid key types', () => { expectNoop( PropTypes.shape({key: PropTypes.number}), {key: 'abc'}, 'Invalid prop `testProp.key` of type `string` supplied to `testComponent`, ' + 'expected `number`.', ); }); it('should be implicitly optional and not warn without values', () => { expectNoop( PropTypes.shape(PropTypes.shape({key: PropTypes.number})), null, ); expectNoop( PropTypes.shape(PropTypes.shape({key: PropTypes.number})), undefined, ); }); it('should warn for missing required values', () => { expectNoop( PropTypes.shape({key: PropTypes.number}).isRequired, ); }); it('should warn if called manually in development', () => { spyOn(console, 'error'); expectNoop(PropTypes.shape({}), 'some string'); expectNoop(PropTypes.shape({foo: PropTypes.number}), { foo: 42, }); expectNoop( PropTypes.shape({key: PropTypes.number}).isRequired, null, ); expectNoop( PropTypes.shape({key: PropTypes.number}).isRequired, undefined, ); expectNoop(PropTypes.element,
); }); }); describe('Symbol Type', () => { it('should warn for non-symbol', () => { expectNoop( PropTypes.symbol, 'hello', 'Invalid prop `testProp` of type `string` supplied to ' + '`testComponent`, expected `symbol`.', ); expectNoop( PropTypes.symbol, function() {}, 'Invalid prop `testProp` of type `function` supplied to ' + '`testComponent`, expected `symbol`.', ); expectNoop( PropTypes.symbol, { '@@toStringTag': 'Katana', }, 'Invalid prop `testProp` of type `object` supplied to ' + '`testComponent`, expected `symbol`.', ); }); it('should not warn for a polyfilled Symbol', () => { const CoreSymbol = require('core-js/library/es6/symbol'); expectNoop(PropTypes.symbol, CoreSymbol('core-js')); }); }); }); prop-types-15.6.2/__tests__/PropTypesProductionStandalone-test.js000066400000000000000000000175141331222337000252310ustar00rootroot00000000000000/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @emails react-core */ 'use strict'; describe('PropTypesProductionStandalone', function() { let React; let PropTypes; function resetWarningCache() { jest.resetModules(); process.env.NODE_ENV = 'production'; React = require('react'); PropTypes = require('../index'); } beforeEach(function() { resetWarningCache(); }); afterEach(function() { delete process.env.NODE_ENV; }); function getPropTypeWarningMessage(propTypes, object, componentName) { if (!console.error.calls) { spyOn(console, 'error'); } else { console.error.calls.reset(); } resetWarningCache(); PropTypes.checkPropTypes(propTypes, object, 'prop', 'testComponent'); const callCount = console.error.calls.count(); if (callCount > 1) { throw new Error('Too many warnings.'); } const message = console.error.calls.argsFor(0)[0] || null; console.error.calls.reset(); return message; } function expectThrowsInProduction(declaration, value) { resetWarningCache(); const props = {testProp: value}; expect(() => { declaration(props, 'testProp', 'testComponent', 'prop'); }).toThrowError( '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 typeCheckPass(declaration, value) { const propTypes = { testProp: declaration, }; const props = { testProp: value, }; const message = getPropTypeWarningMessage(propTypes, props, 'testComponent'); expect(message).toBe(null); } describe('Primitive Types', function() { it('should be a no-op', function() { expectThrowsInProduction(PropTypes.array, /please/); expectThrowsInProduction(PropTypes.array.isRequired, /please/); expectThrowsInProduction(PropTypes.array.isRequired, null); expectThrowsInProduction(PropTypes.array.isRequired, undefined); expectThrowsInProduction(PropTypes.bool, []); expectThrowsInProduction(PropTypes.bool.isRequired, []); expectThrowsInProduction(PropTypes.bool.isRequired, null); expectThrowsInProduction(PropTypes.bool.isRequired, undefined); expectThrowsInProduction(PropTypes.func, false); expectThrowsInProduction(PropTypes.func.isRequired, false); expectThrowsInProduction(PropTypes.func.isRequired, null); expectThrowsInProduction(PropTypes.func.isRequired, undefined); expectThrowsInProduction(PropTypes.number, function() {}); expectThrowsInProduction(PropTypes.number.isRequired, function() {}); expectThrowsInProduction(PropTypes.number.isRequired, null); expectThrowsInProduction(PropTypes.number.isRequired, undefined); expectThrowsInProduction(PropTypes.string, 0); expectThrowsInProduction(PropTypes.string.isRequired, 0); expectThrowsInProduction(PropTypes.string.isRequired, null); expectThrowsInProduction(PropTypes.string.isRequired, undefined); expectThrowsInProduction(PropTypes.symbol, 0); expectThrowsInProduction(PropTypes.symbol.isRequired, 0); expectThrowsInProduction(PropTypes.symbol.isRequired, null); expectThrowsInProduction(PropTypes.symbol.isRequired, undefined); expectThrowsInProduction(PropTypes.object, ''); expectThrowsInProduction(PropTypes.object.isRequired, ''); expectThrowsInProduction(PropTypes.object.isRequired, null); expectThrowsInProduction(PropTypes.object.isRequired, undefined); }); }); describe('Any Type', function() { it('should be a no-op', function() { expectThrowsInProduction(PropTypes.any, null); expectThrowsInProduction(PropTypes.any.isRequired, null); expectThrowsInProduction(PropTypes.any.isRequired, undefined); }); }); describe('ArrayOf Type', function() { it('should be a no-op', function() { expectThrowsInProduction(PropTypes.arrayOf({foo: PropTypes.string}), { foo: 'bar', }); expectThrowsInProduction(PropTypes.arrayOf(PropTypes.number), [ 1, 2, 'b', ]); expectThrowsInProduction(PropTypes.arrayOf(PropTypes.number), { '0': 'maybe-array', length: 1, }); expectThrowsInProduction( PropTypes.arrayOf(PropTypes.number).isRequired, null, ); expectThrowsInProduction( PropTypes.arrayOf(PropTypes.number).isRequired, undefined, ); }); }); describe('Component Type', function() { it('should be a no-op', function() { expectThrowsInProduction(PropTypes.element, [
,
]); expectThrowsInProduction(PropTypes.element, 123); expectThrowsInProduction(PropTypes.element, 'foo'); expectThrowsInProduction(PropTypes.element, false); expectThrowsInProduction(PropTypes.element.isRequired, null); expectThrowsInProduction(PropTypes.element.isRequired, undefined); }); }); describe('Instance Types', function() { it('should be a no-op', function() { expectThrowsInProduction(PropTypes.instanceOf(Date), {}); expectThrowsInProduction(PropTypes.instanceOf(Date).isRequired, {}); }); }); describe('React Component Types', function() { it('should be a no-op', function() { expectThrowsInProduction(PropTypes.node, {}); expectThrowsInProduction(PropTypes.node.isRequired, null); expectThrowsInProduction(PropTypes.node.isRequired, undefined); }); }); describe('ObjectOf Type', function() { it('should be a no-op', function() { expectThrowsInProduction(PropTypes.objectOf({foo: PropTypes.string}), { foo: 'bar', }); expectThrowsInProduction(PropTypes.objectOf(PropTypes.number), { a: 1, b: 2, c: 'b', }); expectThrowsInProduction(PropTypes.objectOf(PropTypes.number), [1, 2]); expectThrowsInProduction(PropTypes.objectOf(PropTypes.number), null); expectThrowsInProduction(PropTypes.objectOf(PropTypes.number), undefined); }); }); describe('OneOf Types', function() { it('should be a no-op', function() { expectThrowsInProduction(PropTypes.oneOf('red', 'blue'), 'red'); expectThrowsInProduction(PropTypes.oneOf(['red', 'blue']), true); expectThrowsInProduction(PropTypes.oneOf(['red', 'blue']), null); expectThrowsInProduction(PropTypes.oneOf(['red', 'blue']), undefined); }); }); describe('Union Types', function() { it('should be a no-op', function() { expectThrowsInProduction( PropTypes.oneOfType(PropTypes.string, PropTypes.number), 'red', ); expectThrowsInProduction( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), [], ); expectThrowsInProduction( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), null, ); expectThrowsInProduction( PropTypes.oneOfType([PropTypes.string, PropTypes.number]), undefined, ); }); }); describe('Shape Types', function() { it('should be a no-op', function() { expectThrowsInProduction(PropTypes.shape({}), 'some string'); expectThrowsInProduction( PropTypes.shape({key: PropTypes.number}).isRequired, null, ); expectThrowsInProduction( PropTypes.shape({key: PropTypes.number}).isRequired, undefined, ); }); }); describe('checkPropTypes', function() { it('does not call validators', function() { spyOn(console, 'error'); const spy = jest.fn(); typeCheckPass(PropTypes.string, 42); typeCheckPass(PropTypes.bool, 'whatever'); typeCheckPass(spy, 'no way'); expect(spy).not.toBeCalled(); }); }); }); prop-types-15.6.2/checkPropTypes.js000066400000000000000000000067161331222337000172360ustar00rootroot00000000000000/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var printWarning = function() {}; if (process.env.NODE_ENV !== 'production') { var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret'); var loggedTypeFailures = {}; printWarning = function(text) { var message = 'Warning: ' + text; if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) {} }; } /** * Assert that the values match with the type specs. * Error messages are memorized and will only be shown once. * * @param {object} typeSpecs Map of name to a ReactPropType * @param {object} values Runtime values that need to be type-checked * @param {string} location e.g. "prop", "context", "child context" * @param {string} componentName Name of the component for error messages. * @param {?Function} getStack Returns the component stack. * @private */ function checkPropTypes(typeSpecs, values, location, componentName, getStack) { if (process.env.NODE_ENV !== 'production') { for (var typeSpecName in typeSpecs) { if (typeSpecs.hasOwnProperty(typeSpecName)) { var error; // Prop type validation may throw. In case they do, we don't want to // fail the render phase where it didn't fail before. So we log it. // After these have been cleaned up, we'll let them throw. try { // This is intentionally an invariant that gets caught. It's the same // behavior as without this statement except with a better message. if (typeof typeSpecs[typeSpecName] !== 'function') { var err = Error( (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' ); err.name = 'Invariant Violation'; throw err; } error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret); } catch (ex) { error = ex; } if (error && !(error instanceof Error)) { printWarning( (componentName || 'React class') + ': type specification of ' + location + ' `' + typeSpecName + '` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).' ) } if (error instanceof Error && !(error.message in loggedTypeFailures)) { // Only monitor this failure once because there tends to be a lot of the // same error. loggedTypeFailures[error.message] = true; var stack = getStack ? getStack() : ''; printWarning( 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '') ); } } } } } module.exports = checkPropTypes; prop-types-15.6.2/factory.js000066400000000000000000000014001331222337000157230ustar00rootroot00000000000000/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; // React 15.5 references this module, and assumes PropTypes are still callable in production. // Therefore we re-export development-only version with all the PropTypes checks here. // However if one is migrating to the `prop-types` npm library, they will go through the // `index.js` entry point, and it will branch depending on the environment. var factory = require('./factoryWithTypeCheckers'); module.exports = function(isValidElement) { // It is still allowed in 15.5. var throwOnDirectAccess = false; return factory(isValidElement, throwOnDirectAccess); }; prop-types-15.6.2/factoryWithThrowingShims.js000066400000000000000000000026751331222337000213240ustar00rootroot00000000000000/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret'); function emptyFunction() {} module.exports = function() { function shim(props, propName, componentName, location, propFullName, secret) { if (secret === ReactPropTypesSecret) { // It is still safe when called from React. return; } var err = new Error( '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' ); err.name = 'Invariant Violation'; throw err; }; shim.isRequired = shim; function getShim() { return shim; }; // Important! // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`. var ReactPropTypes = { array: shim, bool: shim, func: shim, number: shim, object: shim, string: shim, symbol: shim, any: shim, arrayOf: getShim, element: shim, instanceOf: getShim, node: shim, objectOf: getShim, oneOf: getShim, oneOfType: getShim, shape: getShim, exact: getShim }; ReactPropTypes.checkPropTypes = emptyFunction; ReactPropTypes.PropTypes = ReactPropTypes; return ReactPropTypes; }; prop-types-15.6.2/factoryWithTypeCheckers.js000066400000000000000000000474151331222337000211110ustar00rootroot00000000000000/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var assign = require('object-assign'); var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret'); var checkPropTypes = require('./checkPropTypes'); var printWarning = function() {}; if (process.env.NODE_ENV !== 'production') { printWarning = function(text) { var message = 'Warning: ' + text; if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) {} }; } function emptyFunctionThatReturnsNull() { return null; } module.exports = function(isValidElement, throwOnDirectAccess) { /* global Symbol */ var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. /** * Returns the iterator method function contained on the iterable object. * * Be sure to invoke the function with the iterable as context: * * var iteratorFn = getIteratorFn(myIterable); * if (iteratorFn) { * var iterator = iteratorFn.call(myIterable); * ... * } * * @param {?object} maybeIterable * @return {?function} */ function getIteratorFn(maybeIterable) { var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); if (typeof iteratorFn === 'function') { return iteratorFn; } } /** * Collection of methods that allow declaration and validation of props that are * supplied to React components. Example usage: * * var Props = require('ReactPropTypes'); * var MyArticle = React.createClass({ * propTypes: { * // An optional string prop named "description". * description: Props.string, * * // A required enum prop named "category". * category: Props.oneOf(['News','Photos']).isRequired, * * // A prop named "dialog" that requires an instance of Dialog. * dialog: Props.instanceOf(Dialog).isRequired * }, * render: function() { ... } * }); * * A more formal specification of how these methods are used: * * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) * decl := ReactPropTypes.{type}(.isRequired)? * * Each and every declaration produces a function with the same signature. This * allows the creation of custom validation functions. For example: * * var MyLink = React.createClass({ * propTypes: { * // An optional string or URI prop named "href". * href: function(props, propName, componentName) { * var propValue = props[propName]; * if (propValue != null && typeof propValue !== 'string' && * !(propValue instanceof URI)) { * return new Error( * 'Expected a string or an URI for ' + propName + ' in ' + * componentName * ); * } * } * }, * render: function() {...} * }); * * @internal */ var ANONYMOUS = '<>'; // Important! // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. var ReactPropTypes = { array: createPrimitiveTypeChecker('array'), bool: createPrimitiveTypeChecker('boolean'), func: createPrimitiveTypeChecker('function'), number: createPrimitiveTypeChecker('number'), object: createPrimitiveTypeChecker('object'), string: createPrimitiveTypeChecker('string'), symbol: createPrimitiveTypeChecker('symbol'), any: createAnyTypeChecker(), arrayOf: createArrayOfTypeChecker, element: createElementTypeChecker(), instanceOf: createInstanceTypeChecker, node: createNodeChecker(), objectOf: createObjectOfTypeChecker, oneOf: createEnumTypeChecker, oneOfType: createUnionTypeChecker, shape: createShapeTypeChecker, exact: createStrictShapeTypeChecker, }; /** * inlined Object.is polyfill to avoid requiring consumers ship their own * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is */ /*eslint-disable no-self-compare*/ function is(x, y) { // SameValue algorithm if (x === y) { // Steps 1-5, 7-10 // Steps 6.b-6.e: +0 != -0 return x !== 0 || 1 / x === 1 / y; } else { // Step 6.a: NaN == NaN return x !== x && y !== y; } } /*eslint-enable no-self-compare*/ /** * We use an Error-like object for backward compatibility as people may call * PropTypes directly and inspect their output. However, we don't use real * Errors anymore. We don't inspect their stack anyway, and creating them * is prohibitively expensive if they are created too often, such as what * happens in oneOfType() for any type before the one that matched. */ function PropTypeError(message) { this.message = message; this.stack = ''; } // Make `instanceof Error` still work for returned errors. PropTypeError.prototype = Error.prototype; function createChainableTypeChecker(validate) { if (process.env.NODE_ENV !== 'production') { var manualPropTypeCallCache = {}; var manualPropTypeWarningCount = 0; } function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { componentName = componentName || ANONYMOUS; propFullName = propFullName || propName; if (secret !== ReactPropTypesSecret) { if (throwOnDirectAccess) { // New behavior only for users of `prop-types` package var err = new Error( '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' ); err.name = 'Invariant Violation'; throw err; } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') { // Old behavior for people using React.PropTypes var cacheKey = componentName + ':' + propName; if ( !manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors manualPropTypeWarningCount < 3 ) { printWarning( 'You are manually calling a React.PropTypes validation ' + 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.' ); manualPropTypeCallCache[cacheKey] = true; manualPropTypeWarningCount++; } } } if (props[propName] == null) { if (isRequired) { if (props[propName] === null) { return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); } return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); } return null; } else { return validate(props, propName, componentName, location, propFullName); } } var chainedCheckType = checkType.bind(null, false); chainedCheckType.isRequired = checkType.bind(null, true); return chainedCheckType; } function createPrimitiveTypeChecker(expectedType) { function validate(props, propName, componentName, location, propFullName, secret) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== expectedType) { // `propValue` being instance of, say, date/regexp, pass the 'object' // check, but we can offer a more precise error message here rather than // 'of type `object`'. var preciseType = getPreciseType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); } return null; } return createChainableTypeChecker(validate); } function createAnyTypeChecker() { return createChainableTypeChecker(emptyFunctionThatReturnsNull); } function createArrayOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); } var propValue = props[propName]; if (!Array.isArray(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); } for (var i = 0; i < propValue.length; i++) { var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret); if (error instanceof Error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createElementTypeChecker() { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; if (!isValidElement(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); } return null; } return createChainableTypeChecker(validate); } function createInstanceTypeChecker(expectedClass) { function validate(props, propName, componentName, location, propFullName) { if (!(props[propName] instanceof expectedClass)) { var expectedClassName = expectedClass.name || ANONYMOUS; var actualClassName = getClassName(props[propName]); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); } return null; } return createChainableTypeChecker(validate); } function createEnumTypeChecker(expectedValues) { if (!Array.isArray(expectedValues)) { process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOf, expected an instance of array.') : void 0; return emptyFunctionThatReturnsNull; } function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; for (var i = 0; i < expectedValues.length; i++) { if (is(propValue, expectedValues[i])) { return null; } } var valuesString = JSON.stringify(expectedValues); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); } return createChainableTypeChecker(validate); } function createObjectOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); } var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); } for (var key in propValue) { if (propValue.hasOwnProperty(key)) { var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error instanceof Error) { return error; } } } return null; } return createChainableTypeChecker(validate); } function createUnionTypeChecker(arrayOfTypeCheckers) { if (!Array.isArray(arrayOfTypeCheckers)) { process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0; return emptyFunctionThatReturnsNull; } for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; if (typeof checker !== 'function') { printWarning( 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.' ); return emptyFunctionThatReturnsNull; } } function validate(props, propName, componentName, location, propFullName) { for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) { return null; } } return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); } return createChainableTypeChecker(validate); } function createNodeChecker() { function validate(props, propName, componentName, location, propFullName) { if (!isNode(props[propName])) { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); } return null; } return createChainableTypeChecker(validate); } function createShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } for (var key in shapeTypes) { var checker = shapeTypes[key]; if (!checker) { continue; } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createStrictShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } // We need to check all keys in case some are required but missing from // props. var allKeys = assign({}, props[propName], shapeTypes); for (var key in allKeys) { var checker = shapeTypes[key]; if (!checker) { return new PropTypeError( 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ') ); } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function isNode(propValue) { switch (typeof propValue) { case 'number': case 'string': case 'undefined': return true; case 'boolean': return !propValue; case 'object': if (Array.isArray(propValue)) { return propValue.every(isNode); } if (propValue === null || isValidElement(propValue)) { return true; } var iteratorFn = getIteratorFn(propValue); if (iteratorFn) { var iterator = iteratorFn.call(propValue); var step; if (iteratorFn !== propValue.entries) { while (!(step = iterator.next()).done) { if (!isNode(step.value)) { return false; } } } else { // Iterator will provide entry [k,v] tuples rather than values. while (!(step = iterator.next()).done) { var entry = step.value; if (entry) { if (!isNode(entry[1])) { return false; } } } } } else { return false; } return true; default: return false; } } function isSymbol(propType, propValue) { // Native Symbol. if (propType === 'symbol') { return true; } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' if (propValue['@@toStringTag'] === 'Symbol') { return true; } // Fallback for non-spec compliant Symbols which are polyfilled. if (typeof Symbol === 'function' && propValue instanceof Symbol) { return true; } return false; } // Equivalent of `typeof` but with special handling for array and regexp. function getPropType(propValue) { var propType = typeof propValue; if (Array.isArray(propValue)) { return 'array'; } if (propValue instanceof RegExp) { // Old webkits (at least until Android 4.0) return 'function' rather than // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ // passes PropTypes.object. return 'object'; } if (isSymbol(propType, propValue)) { return 'symbol'; } return propType; } // This handles more types than `getPropType`. Only used for error messages. // See `createPrimitiveTypeChecker`. function getPreciseType(propValue) { if (typeof propValue === 'undefined' || propValue === null) { return '' + propValue; } var propType = getPropType(propValue); if (propType === 'object') { if (propValue instanceof Date) { return 'date'; } else if (propValue instanceof RegExp) { return 'regexp'; } } return propType; } // Returns a string that is postfixed to a warning about an invalid type. // For example, "undefined" or "of type array" function getPostfixForTypeWarning(value) { var type = getPreciseType(value); switch (type) { case 'array': case 'object': return 'an ' + type; case 'boolean': case 'date': case 'regexp': return 'a ' + type; default: return type; } } // Returns class name of the object, if any. function getClassName(propValue) { if (!propValue.constructor || !propValue.constructor.name) { return ANONYMOUS; } return propValue.constructor.name; } ReactPropTypes.checkPropTypes = checkPropTypes; ReactPropTypes.PropTypes = ReactPropTypes; return ReactPropTypes; }; prop-types-15.6.2/index.js000066400000000000000000000016741331222337000154000ustar00rootroot00000000000000/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ if (process.env.NODE_ENV !== 'production') { var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && Symbol.for && Symbol.for('react.element')) || 0xeac7; var isValidElement = function(object) { return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; }; // By explicitly using `prop-types` you are opting into new development behavior. // http://fb.me/prop-types-in-prod var throwOnDirectAccess = true; module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess); } else { // By explicitly using `prop-types` you are opting into new production behavior. // http://fb.me/prop-types-in-prod module.exports = require('./factoryWithThrowingShims')(); } prop-types-15.6.2/lib/000077500000000000000000000000001331222337000144715ustar00rootroot00000000000000prop-types-15.6.2/lib/ReactPropTypesSecret.js000066400000000000000000000004721331222337000211240ustar00rootroot00000000000000/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; module.exports = ReactPropTypesSecret; prop-types-15.6.2/package.json000066400000000000000000000026531331222337000162170ustar00rootroot00000000000000{ "name": "prop-types", "version": "15.6.2", "description": "Runtime type checking for React props and similar objects.", "main": "index.js", "license": "MIT", "files": [ "LICENSE", "README.md", "checkPropTypes.js", "factory.js", "factoryWithThrowingShims.js", "factoryWithTypeCheckers.js", "index.js", "prop-types.js", "prop-types.min.js", "lib" ], "repository": "facebook/prop-types", "keywords": [ "react" ], "bugs": { "url": "https://github.com/facebook/prop-types/issues" }, "homepage": "https://facebook.github.io/react/", "dependencies": { "loose-envify": "^1.3.1", "object-assign": "^4.1.1" }, "scripts": { "test": "jest", "umd": "NODE_ENV=development browserify index.js -t envify --standalone PropTypes -o prop-types.js", "umd-min": "NODE_ENV=production browserify index.js -t envify -t uglifyify --standalone PropTypes -p bundle-collapser/plugin -o | uglifyjs --compress unused,dead_code -o prop-types.min.js", "build": "yarn umd && yarn umd-min", "prepublish": "yarn build" }, "devDependencies": { "babel-jest": "^19.0.0", "babel-preset-react": "^6.24.1", "browserify": "^14.3.0", "bundle-collapser": "^1.2.1", "envify": "^4.0.0", "jest": "^19.0.2", "react": "^15.5.1", "uglifyify": "^3.0.4", "uglifyjs": "^2.4.10" }, "browserify": { "transform": [ "loose-envify" ] } } prop-types-15.6.2/yarn.lock000066400000000000000000003050711331222337000155540ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 JSONStream@^1.0.3: version "1.3.1" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a" dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" abab@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" 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@^1.0.3: version "1.2.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014" acorn@^4.0.3, acorn@^4.0.4: version "4.0.11" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" ajv@^4.9.1: version "4.11.7" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.7.tgz#8655a5d86d0824985cc471a1d913fb6729a0ec48" dependencies: co "^4.6.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@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" ansi-styles@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" dependencies: color-convert "^1.0.0" anymatch@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" dependencies: arrify "^1.0.0" micromatch "^2.1.5" 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" 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" 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.0.3" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" array-filter@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" array-reduce@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 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.5" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" 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.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" dependencies: util "0.10.3" astw@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917" dependencies: acorn "^4.0.3" async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" async@^2.1.4: version "2.3.0" resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9" dependencies: lodash "^4.14.0" async@~0.2.6: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" 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" 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.0.0, babel-core@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" dependencies: babel-code-frame "^6.22.0" babel-generator "^6.24.1" babel-helpers "^6.24.1" babel-messages "^6.23.0" babel-register "^6.24.1" babel-runtime "^6.22.0" babel-template "^6.24.1" babel-traverse "^6.24.1" babel-types "^6.24.1" babylon "^6.11.0" 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.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" dependencies: babel-messages "^6.23.0" babel-runtime "^6.22.0" babel-types "^6.24.1" 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-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-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-jest@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f" dependencies: babel-core "^6.0.0" babel-plugin-istanbul "^4.0.0" babel-preset-jest "^19.0.0" 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-istanbul@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.1.tgz#c12de0fc6fe42adfb16be56f1ad11e4a9782eca9" dependencies: find-up "^2.1.0" istanbul-lib-instrument "^1.6.2" test-exclude "^4.0.3" babel-plugin-jest-hoist@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea" 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-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-react-display-name@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.23.0.tgz#4398910c358441dc4cef18787264d0412ed36b37" 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-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-jest@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396" dependencies: babel-plugin-jest-hoist "^19.0.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-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.22.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" dependencies: core-js "^2.4.0" regenerator-runtime "^0.10.0" babel-template@^6.16.0, babel-template@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" babel-types "^6.24.1" babylon "^6.11.0" lodash "^4.2.0" babel-traverse@^6.18.0, babel-traverse@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" dependencies: babel-code-frame "^6.22.0" babel-messages "^6.23.0" babel-runtime "^6.22.0" babel-types "^6.24.1" babylon "^6.15.0" debug "^2.2.0" globals "^9.0.0" invariant "^2.2.0" lodash "^4.2.0" babel-types@^6.18.0, babel-types@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" dependencies: babel-runtime "^6.22.0" esutils "^2.0.2" lodash "^4.2.0" to-fast-properties "^1.0.1" babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: version "6.17.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932" balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" base64-js@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" 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" bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" 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.0.0: version "1.1.7" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" dependencies: balanced-match "^0.4.1" 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" browser-pack@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-5.0.1.tgz#4197719b20c6e0aaa09451c5111e53efb6fbc18d" dependencies: JSONStream "^1.0.3" combine-source-map "~0.6.1" defined "^1.0.0" through2 "^1.0.0" umd "^3.0.0" browser-pack@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.2.tgz#f86cd6cef4f5300c8e63e07a4d512f65fbff4531" dependencies: JSONStream "^1.0.3" combine-source-map "~0.7.1" defined "^1.0.0" through2 "^2.0.0" umd "^3.0.0" browser-resolve@^1.11.0, browser-resolve@^1.11.2, browser-resolve@^1.7.0: version "1.11.2" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" dependencies: resolve "1.1.7" browser-unpack@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browser-unpack/-/browser-unpack-1.2.0.tgz#357aee31fc467831684d063e4355e070a782970d" dependencies: acorn "^4.0.3" browser-pack "^5.0.1" concat-stream "^1.5.0" minimist "^1.1.1" 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.2: version "0.1.4" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" dependencies: pako "~0.2.0" browserify@^14.3.0: version "14.3.0" resolved "https://registry.yarnpkg.com/browserify/-/browserify-14.3.0.tgz#fd003a2386ac1aec127f097885a3cc6373b745c4" dependencies: JSONStream "^1.0.3" assert "^1.4.0" browser-pack "^6.0.1" browser-resolve "^1.11.0" browserify-zlib "~0.1.2" buffer "^5.0.2" cached-path-relative "^1.0.0" concat-stream "~1.5.1" console-browserify "^1.1.0" constants-browserify "~1.0.0" crypto-browserify "^3.0.0" defined "^1.0.0" deps-sort "^2.0.0" domain-browser "~1.1.0" duplexer2 "~0.1.2" events "~1.1.0" glob "^7.1.0" has "^1.0.0" htmlescape "^1.1.0" https-browserify "^1.0.0" inherits "~2.0.1" insert-module-globals "^7.0.0" labeled-stream-splicer "^2.0.0" module-deps "^4.0.8" os-browserify "~0.1.1" parents "^1.0.1" path-browserify "~0.0.0" process "~0.11.0" punycode "^1.3.2" querystring-es3 "~0.2.0" read-only-stream "^2.0.0" readable-stream "^2.0.2" resolve "^1.1.4" shasum "^1.0.0" shell-quote "^1.6.1" stream-browserify "^2.0.0" stream-http "^2.0.0" string_decoder "~0.10.0" subarg "^1.0.0" syntax-error "^1.1.1" through2 "^2.0.0" timers-browserify "^1.0.1" tty-browserify "~0.0.0" url "~0.11.0" util "~0.10.1" vm-browserify "~0.0.1" xtend "^4.0.0" bser@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" dependencies: node-int64 "^0.4.0" bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" dependencies: node-int64 "^0.4.0" buffer-shims@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" buffer-xor@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" buffer@^5.0.2: version "5.0.6" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.6.tgz#2ea669f7eec0b6eda05b08f8b5ff661b28573588" dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" builtin-modules@^1.0.0: 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" bundle-collapser@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/bundle-collapser/-/bundle-collapser-1.2.1.tgz#e119afc92638e440b9085f47ae081fa756cba33d" dependencies: browser-pack "^5.0.1" browser-unpack "^1.1.0" concat-stream "^1.5.0" falafel "^1.2.0" minimist "^1.1.1" through2 "^2.0.0" cached-path-relative@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" 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" ci-info@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" cipher-base@^1.0.0, cipher-base@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" dependencies: inherits "^2.0.1" 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.0.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.2" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" combine-source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.6.1.tgz#9b4a09c316033d768e0f11e029fa2730e079ad96" dependencies: convert-source-map "~1.1.0" inline-source-map "~0.5.0" lodash.memoize "~3.0.3" source-map "~0.4.2" combine-source-map@~0.7.1: version "0.7.2" resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e" dependencies: convert-source-map "~1.1.0" inline-source-map "~0.6.0" lodash.memoize "~3.0.3" source-map "~0.5.3" 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" 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.5.0, concat-stream@~1.5.0, concat-stream@~1.5.1: version "1.5.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" dependencies: inherits "~2.0.1" readable-stream "~2.0.0" typedarray "~0.0.5" 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" constants-browserify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" 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" convert-source-map@^1.1.0, convert-source-map@~1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" core-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" 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: version "1.1.2" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" dependencies: cipher-base "^1.0.1" inherits "^2.0.1" ripemd160 "^1.0.0" sha.js "^2.3.6" create-hmac@^1.1.0, create-hmac@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" dependencies: create-hash "^1.1.0" inherits "^2.0.1" 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.0.0: version "3.11.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" 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" 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@^2.1.1, debug@^2.2.0: version "2.6.4" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0" dependencies: ms "0.7.3" decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 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" defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" deps-sort@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" dependencies: JSONStream "^1.0.3" shasum "^1.0.0" subarg "^1.0.0" through2 "^2.0.0" 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" 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" detective@^4.0.0: version "4.5.0" resolved "https://registry.yarnpkg.com/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1" dependencies: acorn "^4.0.3" defined "^1.0.0" diff@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 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" domain-browser@~1.1.0: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" dependencies: readable-stream "^2.0.2" 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" 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" 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" envify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/envify/-/envify-4.0.0.tgz#f791343e3d11cc29cce41150300a8af61c66cab0" dependencies: esprima "~3.1.0" through "~2.3.4" "errno@>=0.1.1 <0.2.0-0": 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" escape-string-regexp@^1.0.2: 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" esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" esprima@^3.1.1, esprima@~3.1.0: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" events@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" 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" exec-sh@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" dependencies: merge "^1.1.3" 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" extend@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/extend/-/extend-1.3.0.tgz#d1516fb0ff5624d2ebf9123ea1dac5a1994004f8" extend@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" 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.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" falafel@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/falafel/-/falafel-1.2.0.tgz#c18d24ef5091174a497f318cd24b026a25cddab4" dependencies: acorn "^1.0.3" foreach "^2.0.5" isarray "0.0.1" object-keys "^1.0.6" fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" fb-watchman@^1.8.0: version "1.9.2" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" dependencies: bser "1.0.2" fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" dependencies: bser "^2.0.0" fbjs@^0.8.9: version "0.8.12" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" 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" filename-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" fileset@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" dependencies: glob "^7.0.3" minimatch "^3.0.3" 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" 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.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" 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" 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@~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" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" function-bind@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" 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" 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.3, glob@^7.0.5, glob@^7.1.0: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.2" once "^1.3.0" path-is-absolute "^1.0.0" globals@^9.0.0: version "9.17.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" handlebars@^4.0.3: version "4.0.6" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" 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@~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@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" dependencies: function-bind "^1.0.2" hash.js@^1.0.0, hash.js@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" dependencies: inherits "^2.0.1" 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.4.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" 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" htmlescape@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" 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@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" 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.13: version "0.4.16" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.16.tgz#65de3beeb39e2960d67f049f1634ffcbcde9014b" ieee754@^1.1.4: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" 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.1, inherits@~2.0.1: 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" inline-source-map@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.5.0.tgz#4a4c5dd8e4fb5e9b3cda60c822dfadcaee66e0af" dependencies: source-map "~0.4.0" inline-source-map@~0.6.0: version "0.6.2" resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" dependencies: source-map "~0.5.3" insert-module-globals@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.1.tgz#c03bf4e01cb086d5b5e5ace8ad0afe7889d638c3" dependencies: JSONStream "^1.0.3" combine-source-map "~0.7.1" concat-stream "~1.5.1" is-buffer "^1.1.0" lexical-scope "^1.2.0" process "~0.11.0" through2 "^2.0.0" xtend "^4.0.0" 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" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" is-buffer@^1.1.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-ci@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" dependencies: ci-info "^1.0.0" is-dotfile@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" 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-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-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-number@^2.0.2, 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-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-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 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, 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: 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-api@^1.1.0-alpha.1: version "1.1.7" resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.7.tgz#f6f37f09f8002b130f891c646b70ee4a8e7345ae" dependencies: async "^2.1.4" fileset "^2.0.2" istanbul-lib-coverage "^1.0.2" istanbul-lib-hook "^1.0.5" istanbul-lib-instrument "^1.7.0" istanbul-lib-report "^1.0.0" istanbul-lib-source-maps "^1.1.1" istanbul-reports "^1.0.2" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.2.tgz#87a0c015b6910651cb3b184814dfb339337e25e1" istanbul-lib-hook@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.5.tgz#6ca3d16d60c5f4082da39f7c5cd38ea8a772b88e" dependencies: append-transform "^0.4.0" istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.6.2, istanbul-lib-instrument@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.0.tgz#b8e0dc25709bb44e17336ab47b7bb5c97c23f659" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" babylon "^6.13.0" istanbul-lib-coverage "^1.0.2" semver "^5.3.0" istanbul-lib-report@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0.tgz#d83dac7f26566b521585569367fe84ccfc7aaecb" dependencies: istanbul-lib-coverage "^1.0.2" mkdirp "^0.5.1" path-parse "^1.0.5" supports-color "^3.1.2" istanbul-lib-source-maps@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.1.tgz#f8c8c2e8f2160d1d91526d97e5bd63b2079af71c" dependencies: istanbul-lib-coverage "^1.0.2" mkdirp "^0.5.1" rimraf "^2.4.4" source-map "^0.5.3" istanbul-reports@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.2.tgz#4e8366abe6fa746cc1cd6633f108de12cc6ac6fa" dependencies: handlebars "^4.0.3" jest-changed-files@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-19.0.2.tgz#16c54c84c3270be408e06d2e8af3f3e37a885824" jest-cli@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-19.0.2.tgz#cc3620b62acac5f2d93a548cb6ef697d4ec85443" dependencies: ansi-escapes "^1.4.0" callsites "^2.0.0" chalk "^1.1.1" graceful-fs "^4.1.6" is-ci "^1.0.9" istanbul-api "^1.1.0-alpha.1" istanbul-lib-coverage "^1.0.0" istanbul-lib-instrument "^1.1.1" jest-changed-files "^19.0.2" jest-config "^19.0.2" jest-environment-jsdom "^19.0.2" jest-haste-map "^19.0.0" jest-jasmine2 "^19.0.2" jest-message-util "^19.0.0" jest-regex-util "^19.0.0" jest-resolve-dependencies "^19.0.0" jest-runtime "^19.0.2" jest-snapshot "^19.0.2" jest-util "^19.0.2" micromatch "^2.3.11" node-notifier "^5.0.1" slash "^1.0.0" string-length "^1.0.1" throat "^3.0.0" which "^1.1.1" worker-farm "^1.3.1" yargs "^6.3.0" jest-config@^19.0.2: version "19.0.3" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-19.0.3.tgz#829c6356c6e7e8abdd5657580707a5922b9fc90d" dependencies: chalk "^1.1.1" jest-environment-jsdom "^19.0.2" jest-environment-node "^19.0.2" jest-jasmine2 "^19.0.2" jest-regex-util "^19.0.0" jest-resolve "^19.0.2" jest-validate "^19.0.2" pretty-format "^19.0.0" jest-diff@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-19.0.0.tgz#d1563cfc56c8b60232988fbc05d4d16ed90f063c" dependencies: chalk "^1.1.3" diff "^3.0.0" jest-matcher-utils "^19.0.0" pretty-format "^19.0.0" jest-environment-jsdom@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-19.0.2.tgz#ceda859c4a4b94ab35e4de7dab54b926f293e4a3" dependencies: jest-mock "^19.0.0" jest-util "^19.0.2" jsdom "^9.11.0" jest-environment-node@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-19.0.2.tgz#6e84079db87ed21d0c05e1f9669f207b116fe99b" dependencies: jest-mock "^19.0.0" jest-util "^19.0.2" jest-file-exists@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-19.0.0.tgz#cca2e587a11ec92e24cfeab3f8a94d657f3fceb8" jest-haste-map@^19.0.0: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.2.tgz#286484c3a16e86da7872b0877c35dce30c3d6f07" dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.6" micromatch "^2.3.11" sane "~1.5.0" worker-farm "^1.3.1" jest-jasmine2@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-19.0.2.tgz#167991ac825981fb1a800af126e83afcca832c73" dependencies: graceful-fs "^4.1.6" jest-matcher-utils "^19.0.0" jest-matchers "^19.0.0" jest-message-util "^19.0.0" jest-snapshot "^19.0.2" jest-matcher-utils@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz#5ecd9b63565d2b001f61fbf7ec4c7f537964564d" dependencies: chalk "^1.1.3" pretty-format "^19.0.0" jest-matchers@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-19.0.0.tgz#c74ecc6ebfec06f384767ba4d6fa4a42d6755754" dependencies: jest-diff "^19.0.0" jest-matcher-utils "^19.0.0" jest-message-util "^19.0.0" jest-regex-util "^19.0.0" jest-message-util@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-19.0.0.tgz#721796b89c0e4d761606f9ba8cb828a3b6246416" dependencies: chalk "^1.1.1" micromatch "^2.3.11" jest-mock@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-19.0.0.tgz#67038641e9607ab2ce08ec4a8cb83aabbc899d01" jest-regex-util@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-19.0.0.tgz#b7754587112aede1456510bb1f6afe74ef598691" jest-resolve-dependencies@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-19.0.0.tgz#a741ad1fa094140e64ecf2642a504f834ece22ee" dependencies: jest-file-exists "^19.0.0" jest-resolve@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-19.0.2.tgz#5793575de4f07aec32f7d7ff0c6c181963eefb3c" dependencies: browser-resolve "^1.11.2" jest-haste-map "^19.0.0" resolve "^1.2.0" jest-runtime@^19.0.2: version "19.0.3" resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-19.0.3.tgz#a163354ace46910ee33f0282b6bff6b0b87d4330" dependencies: babel-core "^6.0.0" babel-jest "^19.0.0" babel-plugin-istanbul "^4.0.0" chalk "^1.1.3" graceful-fs "^4.1.6" jest-config "^19.0.2" jest-file-exists "^19.0.0" jest-haste-map "^19.0.0" jest-regex-util "^19.0.0" jest-resolve "^19.0.2" jest-util "^19.0.2" json-stable-stringify "^1.0.1" micromatch "^2.3.11" strip-bom "3.0.0" yargs "^6.3.0" jest-snapshot@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-19.0.2.tgz#9c1b216214f7187c38bfd5c70b1efab16b0ff50b" dependencies: chalk "^1.1.3" jest-diff "^19.0.0" jest-file-exists "^19.0.0" jest-matcher-utils "^19.0.0" jest-util "^19.0.2" natural-compare "^1.4.0" pretty-format "^19.0.0" jest-util@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-19.0.2.tgz#e0a0232a2ab9e6b2b53668bdb3534c2b5977ed41" dependencies: chalk "^1.1.1" graceful-fs "^4.1.6" jest-file-exists "^19.0.0" jest-message-util "^19.0.0" jest-mock "^19.0.0" jest-validate "^19.0.2" leven "^2.0.0" mkdirp "^0.5.1" jest-validate@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.2.tgz#dc534df5f1278d5b63df32b14241d4dbf7244c0c" dependencies: chalk "^1.1.1" jest-matcher-utils "^19.0.0" leven "^2.0.0" pretty-format "^19.0.0" jest@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest/-/jest-19.0.2.tgz#b794faaf8ff461e7388f28beef559a54f20b2c10" dependencies: jest-cli "^19.0.2" jodid25519@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" dependencies: jsbn "~0.1.0" js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" js-yaml@^3.7.0: version "3.8.3" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" dependencies: argparse "^1.0.7" esprima "^3.1.1" jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" jsdom@^9.11.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" 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.3.9 < 2.0.0" parse5 "^1.5.1" request "^2.79.0" 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 "^4.3.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" 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-stable-stringify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" 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" json5@^0.5.0: 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" jsonparse@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.0.tgz#85fc245b1d9259acc6941960b905adf64e7de0e8" jsprim@^1.2.2: version "1.4.0" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" dependencies: assert-plus "1.0.0" extsprintf "1.0.2" json-schema "0.2.3" verror "1.3.6" kind-of@^3.0.2: version "3.2.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" dependencies: is-buffer "^1.1.5" labeled-stream-splicer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59" dependencies: inherits "^2.0.1" isarray "~0.0.1" stream-splicer "^2.0.0" 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" leven@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" 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" lexical-scope@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4" dependencies: astw "^2.0.0" 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" 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.memoize@~3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" lodash@^4.14.0, lodash@^4.2.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 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://artifacts.netflix.com/api/npm/npm-netflix/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: js-tokens "^3.0.0" makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" dependencies: tmpl "1.0.x" merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" 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.27.0: version "1.27.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" mime-types@^2.1.12, mime-types@~2.1.7: version "2.1.15" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" dependencies: mime-db "~1.27.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.2, minimatch@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: brace-expansion "^1.0.0" 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.1.0, minimist@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" module-deps@^4.0.8: version "4.1.1" resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd" dependencies: JSONStream "^1.0.3" browser-resolve "^1.7.0" cached-path-relative "^1.0.0" concat-stream "~1.5.0" defined "^1.0.0" detective "^4.0.0" duplexer2 "^0.1.2" inherits "^2.0.1" parents "^1.0.0" readable-stream "^2.0.2" resolve "^1.1.3" stream-combiner2 "^1.1.1" subarg "^1.0.0" through2 "^2.0.0" xtend "^4.0.0" ms@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" node-fetch@^1.0.1: version "1.6.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" dependencies: encoding "^0.1.11" is-stream "^1.0.1" node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" node-notifier@^5.0.1: version "5.1.2" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" dependencies: growly "^1.3.0" semver "^5.3.0" shellwords "^0.1.0" which "^1.2.12" normalize-package-data@^2.3.2: version "2.3.8" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" 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.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" 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.3.9 < 2.0.0": version "1.3.9" resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" 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.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.6: 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" once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" 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: 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" os-browserify@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" os-homedir@^1.0.0: 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-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 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" pako@~0.2.0: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" parents@^1.0.0, parents@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" dependencies: path-platform "~0.11.15" 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@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" 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-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" path-platform@~0.11.15: version "0.11.15" resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" 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" pbkdf2@^3.0.3: version "3.0.9" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" dependencies: create-hmac "^1.1.2" 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: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 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" 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" pretty-format@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84" dependencies: ansi-styles "^3.0.0" 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" promise@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" dependencies: asap "~2.0.3" prop-types@^15.5.7: version "15.5.8" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394" dependencies: fbjs "^0.8.9" prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" 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.3.2, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 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" randomatic@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" dependencies: is-number "^2.0.2" kind-of "^3.0.2" randombytes@^2.0.0, randombytes@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" react@^15.5.1: version "15.5.4" resolved "https://registry.yarnpkg.com/react/-/react-15.5.4.tgz#fa83eb01506ab237cdc1c8c3b1cea8de012bf047" dependencies: fbjs "^0.8.9" loose-envify "^1.1.0" object-assign "^4.1.0" prop-types "^15.5.7" read-only-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" dependencies: readable-stream "^2.0.2" 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@^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" "readable-stream@>=1.1.13-1 <1.2.0-0": version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.6: version "2.2.9" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" dependencies: buffer-shims "~1.0.0" core-util-is "~1.0.0" inherits "~2.0.1" isarray "~1.0.0" process-nextick-args "~1.0.6" string_decoder "~1.0.0" util-deprecate "~1.0.1" readable-stream@~2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "~1.0.0" process-nextick-args "~1.0.6" string_decoder "~0.10.x" util-deprecate "~1.0.1" regenerator-runtime@^0.10.0: version "0.10.4" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.4.tgz#74cb6598d3ba2eb18694e968a40e2b3b4df9cf93" 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" remove-trailing-separator@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" 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@^2.79.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" resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolve@^1.1.3, resolve@^1.1.4, resolve@^1.2.0: version "1.3.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" dependencies: path-parse "^1.0.5" 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.4.4: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: glob "^7.0.5" ripemd160@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" safe-buffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" sane@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/sane/-/sane-1.5.0.tgz#a4adeae764d048621ecb27d5f9ecf513101939f3" dependencies: anymatch "^1.3.0" exec-sh "^0.2.0" fb-watchman "^1.8.0" minimatch "^3.0.2" minimist "^1.1.1" walker "~1.0.5" watch "~0.10.0" sax@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" "semver@2 || 3 || 4 || 5", semver@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" sha.js@^2.3.6, sha.js@~2.4.4: version "2.4.8" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" dependencies: inherits "^2.0.1" shasum@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" dependencies: json-stable-stringify "~0.0.0" sha.js "~2.4.4" shell-quote@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" dependencies: array-filter "~0.0.0" array-map "~0.0.0" array-reduce "~0.0.0" jsonify "~0.0.0" shellwords@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 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" source-map-support@^0.4.2: version "0.4.14" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" dependencies: source-map "^0.5.6" source-map@0.1.34: version "0.1.34" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.34.tgz#a7cfe89aec7b1682c3b198d0acfb47d7d090566b" dependencies: amdefine ">=0.0.4" source-map@^0.4.4, source-map@~0.4.0, source-map@~0.4.2: 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" 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" 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.0" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" 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" jodid25519 "^1.0.0" jsbn "~0.1.0" tweetnacl "~0.14.0" stream-browserify@^2.0.0: 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-combiner2@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" dependencies: duplexer2 "~0.1.0" readable-stream "^2.0.2" stream-http@^2.0.0: version "2.7.0" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.0.tgz#cec1f4e3b494bc4a81b451808970f8b20b4ed5f6" 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" stream-splicer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" dependencies: inherits "^2.0.1" readable-stream "^2.0.2" string-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" dependencies: strip-ansi "^3.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_decoder@~0.10.0, string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" string_decoder@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" dependencies: buffer-shims "~1.0.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-bom@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 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" subarg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" dependencies: minimist "^1.1.0" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 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" symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" syntax-error@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.3.0.tgz#1ed9266c4d40be75dc55bf9bb1cb77062bb96ca1" dependencies: acorn "^4.0.3" test-exclude@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.0.3.tgz#86a13ce3effcc60e6c90403cf31a27a60ac6c4e7" 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" throat@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" through2@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/through2/-/through2-1.1.1.tgz#0847cbc4449f3405574dbdccd9bb841b83ac3545" dependencies: readable-stream ">=1.1.13-1 <1.2.0-0" xtend ">=4.0.0 <4.1.0-0" through2@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" dependencies: readable-stream "^2.1.5" xtend "~4.0.1" "through@>=2.2.7 <3", through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" timers-browserify@^1.0.1: version "1.4.2" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" dependencies: process "~0.11.0" tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" 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.2" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" 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-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 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" 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" typedarray@~0.0.5: 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.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" uglify-js@2.x.x, uglify-js@^2.6: version "2.8.22" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" 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" uglifyify@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/uglifyify/-/uglifyify-3.0.4.tgz#487e080a5a7798880e68e90def9b06681fb13bd2" dependencies: convert-source-map "~1.1.0" extend "^1.2.1" minimatch "^3.0.2" through "~2.3.4" uglify-js "2.x.x" uglifyjs@^2.4.10: version "2.4.10" resolved "https://registry.yarnpkg.com/uglifyjs/-/uglifyjs-2.4.10.tgz#632927319fa6a3da3fc91f9773ac27bfe6c3ee92" dependencies: async "~0.2.6" source-map "0.1.34" uglify-to-browserify "~1.0.0" yargs "~1.3.3" umd@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e" 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" 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.1: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" dependencies: inherits "2.0.1" uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" 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" verror@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" dependencies: extsprintf "1.0.2" vm-browserify@~0.0.1: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" dependencies: indexof "0.0.1" walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" dependencies: makeerror "1.0.x" watch@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" webidl-conversions@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" 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@^4.3.0: version "4.7.1" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.7.1.tgz#df4dc2e3f25a63b1fa5b32ed6d6c139577d690de" dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" which@^1.1.1, which@^1.2.12: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: isexe "^2.0.0" 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" worker-farm@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" dependencies: errno ">=0.1.1 <0.2.0-0" xtend ">=4.0.0 <4.1.0-0" 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" 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 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1: 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" 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@^6.3.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@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.3.3.tgz#054de8b61f22eefdb7207059eaef9d6b83fb931a" 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"