From 74840271dff4be5627066be132e6f68f4c04119c Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Sat, 25 Feb 2017 18:29:05 +0100 Subject: [PATCH] Add flow-type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Nice code, no warnings at all, except one. - Added some types. - Don’t be surprised code is slightly reformatted. I am using awesome jlongster/prettier, everybody should use it. - flow-type helps a lot, code navigation eases lib exploration --- .flowconfig | 0 package.json | 1 + src/constants.js | 1 + src/dispatched.js | 15 +- src/index.js | 7 +- src/prepare.js | 38 +- src/prepared.js | 21 +- src/tests/ReactLifeCycle.spec.js | 33 +- src/tests/dispatched.spec.js | 70 +-- src/tests/isReactCompositeComponent.spec.js | 6 +- src/tests/isThenable.spec.js | 1 + src/tests/prepare.spec.js | 114 +++-- src/tests/prepared.spec.js | 148 +++++-- src/utils/isReactCompositeComponent.js | 9 +- src/utils/isThenable.js | 3 +- yarn.lock | 454 +++++++++++--------- 16 files changed, 547 insertions(+), 374 deletions(-) create mode 100644 .flowconfig diff --git a/.flowconfig b/.flowconfig new file mode 100644 index 0000000..e69de29 diff --git a/package.json b/package.json index 98a610b..0f4982f 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "eslint": "^3.8.1", "eslint-plugin-babel": "^4.0.1", "eslint-plugin-react": "^6.4.1", + "flow-bin": "^0.40.0", "koa": "^1.2.4", "mocha": "^3.2.0", "node-fetch": "^1.6.3", diff --git a/src/constants.js b/src/constants.js index bf64a70..b80f741 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1 +1,2 @@ +// @flow export const __REACT_PREPARE__ = '@__REACT_PREPARE__@'; diff --git a/src/dispatched.js b/src/dispatched.js index b8fcc2c..2d2f0a8 100644 --- a/src/dispatched.js +++ b/src/dispatched.js @@ -1,3 +1,4 @@ +// @flow import { PropTypes } from 'react'; import prepared from './prepared'; @@ -6,8 +7,18 @@ const storeShape = PropTypes.shape({ dispatch: PropTypes.func.isRequired, }); -const dispatched = (prepareUsingDispatch, opts = {}) => (OriginalComponent) => { - const prepare = (props, { store: { dispatch } }) => prepareUsingDispatch(props, dispatch); +type Opts = { + componentDidMount?: boolean, + componentWillReceiveProps?: boolean, + contextTypes?: Object, + pure?: boolean, +}; + +const dispatched = (prepareUsingDispatch: Function, opts: Opts = {}) => ( + OriginalComponent: Function, +) => { + const prepare = (props, { store: { dispatch } }) => + prepareUsingDispatch(props, dispatch); const contextTypes = Object.assign( {}, opts && opts.contextTypes ? opts.contextTypes : {}, diff --git a/src/index.js b/src/index.js index 346a537..6e33cb3 100644 --- a/src/index.js +++ b/src/index.js @@ -1,11 +1,8 @@ +// @flow import dispatched from './dispatched'; import prepare from './prepare'; import prepared from './prepared'; -export { - dispatched, - prepare, - prepared, -}; +export { dispatched, prepare, prepared }; export default prepare; diff --git a/src/prepare.js b/src/prepare.js index 7354099..ac1c7bb 100644 --- a/src/prepare.js +++ b/src/prepare.js @@ -1,29 +1,36 @@ +// @flow import React from 'react'; import isReactCompositeComponent from './utils/isReactCompositeComponent'; import isThenable from './utils/isThenable'; import { isPrepared, getPrepare } from './prepared'; -function createCompositeElementInstance({ type: CompositeComponent, props }, context) { +function createCompositeElementInstance( + { type: CompositeComponent, props }, + context, +) { const instance = new CompositeComponent(props, context); - if(instance.componentWillMount) { + if (instance.componentWillMount) { instance.componentWillMount(); } return instance; } function renderCompositeElementInstance(instance, context = {}) { - const childContext = Object.assign({}, context, instance.getChildContext ? instance.getChildContext() : {}); + const childContext = Object.assign( + {}, + context, + instance.getChildContext ? instance.getChildContext() : {}, + ); return [instance.render(), childContext]; } -function disposeOfCompositeElementInstance() { -} +function disposeOfCompositeElementInstance() {} async function prepareCompositeElement({ type, props }, context) { - if(isPrepared(type)) { + if (isPrepared(type)) { const p = getPrepare(type)(props, context); - if(isThenable(p)) { + if (isThenable(p)) { await p; } } @@ -31,31 +38,32 @@ async function prepareCompositeElement({ type, props }, context) { try { instance = createCompositeElementInstance({ type, props }, context); return renderCompositeElementInstance(instance, context); - } - finally { - if(instance !== null) { + } finally { + if (instance !== null) { disposeOfCompositeElementInstance(instance); } } } async function prepareElement(element, context) { - if(element === null || typeof element !== 'object') { + if (element === null || typeof element !== 'object') { return [null, context]; } const { type, props } = element; - if(typeof type === 'string') { + if (typeof type === 'string') { return [props.children, context]; } - if(!isReactCompositeComponent(type)) { + if (!isReactCompositeComponent(type)) { return [type(props), context]; } return await prepareCompositeElement(element, context); } -const prepare = async (element, context = {}) => { +const prepare = async (element: any, context: Object = {}) => { const [children, childContext] = await prepareElement(element, context); - await Promise.all(React.Children.toArray(children).map((child) => prepare(child, childContext))); + await Promise.all( + React.Children.toArray(children).map(child => prepare(child, childContext)), + ); }; export default prepare; diff --git a/src/prepared.js b/src/prepared.js index 908eb56..caa9eeb 100644 --- a/src/prepared.js +++ b/src/prepared.js @@ -1,13 +1,17 @@ +// @flow weak import React, { PureComponent, Component } from 'react'; import { __REACT_PREPARE__ } from './constants'; -const prepared = (prepare, { - pure = true, - componentDidMount = true, - componentWillReceiveProps = true, - contextTypes = {}, -} = {}) => (OriginalComponent) => { +const prepared = ( + prepare, + { + pure = true, + componentDidMount = true, + componentWillReceiveProps = true, + contextTypes = {}, + } = {}, +) => OriginalComponent => { const { displayName } = OriginalComponent; class PreparedComponent extends (pure ? PureComponent : Component) { static displayName = `PreparedComponent${displayName ? `(${displayName})` : ''}`; @@ -16,13 +20,13 @@ const prepared = (prepare, { static contextTypes = contextTypes; componentDidMount() { - if(componentDidMount) { + if (componentDidMount) { prepare(this.props, this.context); } } componentWillReceiveProps(nextProps, nextContext) { - if(componentWillReceiveProps) { + if (componentWillReceiveProps) { prepare(nextProps, nextContext); } } @@ -31,6 +35,7 @@ const prepared = (prepare, { return ; } } + // $FlowFixMe PreparedComponent[__REACT_PREPARE__] = prepare.bind(null); return PreparedComponent; }; diff --git a/src/tests/ReactLifeCycle.spec.js b/src/tests/ReactLifeCycle.spec.js index 8279f46..10ee96d 100644 --- a/src/tests/ReactLifeCycle.spec.js +++ b/src/tests/ReactLifeCycle.spec.js @@ -1,3 +1,4 @@ +// @flow const { describe, it } = global; import React, { Component, PropTypes } from 'react'; import { renderToString } from 'react-dom/server'; @@ -29,20 +30,30 @@ describe('React lifecycle methods', () => { it('renderToString calls #componentWillMount()', () => { const spyForComponentWillMount = sinon.spy(); const spyForComponentWillUnmount = () => void 0; - renderToString(); - t.assert(spyForComponentWillMount.calledOnce, '#componentWillMount() has been called once'); + renderToString( + , + ); + t.assert( + spyForComponentWillMount.calledOnce, + '#componentWillMount() has been called once', + ); }); - it('renderToString doesn\'t call #componentWillUnmount()', () => { + it("renderToString doesn't call #componentWillUnmount()", () => { const spyForComponentWillMount = () => void 0; const spyForComponentWillUnmount = sinon.spy(); - renderToString(); - t.assert(spyForComponentWillUnmount.callCount === 0, '#componentWillUnmount() has not been called'); + renderToString( + , + ); + t.assert( + spyForComponentWillUnmount.callCount === 0, + '#componentWillUnmount() has not been called', + ); }); }); diff --git a/src/tests/dispatched.spec.js b/src/tests/dispatched.spec.js index e2b7b4f..0bd231f 100644 --- a/src/tests/dispatched.spec.js +++ b/src/tests/dispatched.spec.js @@ -1,3 +1,4 @@ +// @flow const { describe, it } = global; import url from 'url'; import t from 'tcomb'; @@ -19,7 +20,6 @@ const HTTP_STATUS_OK_BOUNDS = { describe('dispatched', () => { it('Real-world-like example using redux, koa, et. al', async () => { - // Create a fake echo server that replies with the pathname, preceded by 'echo '. const echoServer = koa().use(function* echo(next) { this.response.body = `echo ${this.request.path}`; @@ -39,7 +39,7 @@ describe('dispatched', () => { const FETCH_SUCCEEDED = 'FETCH_SUCCEEDED'; const rootReducer = (state = {}, { type, ...payload }) => { - if(type === FETCH_STARTED) { + if (type === FETCH_STARTED) { const { into } = payload; return Object.assign({}, state, { [into]: { @@ -47,7 +47,7 @@ describe('dispatched', () => { }, }); } - if(type === FETCH_FAILED) { + if (type === FETCH_FAILED) { const { into, statusCode, err } = payload; return Object.assign({}, state, { [into]: { @@ -57,7 +57,7 @@ describe('dispatched', () => { }, }); } - if(type === FETCH_SUCCEEDED) { + if (type === FETCH_SUCCEEDED) { const { into, value } = payload; return Object.assign({}, state, { [into]: { @@ -70,15 +70,10 @@ describe('dispatched', () => { }; // redux store used by the app - const store = createStore( - rootReducer, - applyMiddleware( - thunkMiddleware, - ), - ); + const store = createStore(rootReducer, applyMiddleware(thunkMiddleware)); // async action creator - const fetchInto = (pathname, into) => async (dispatch) => { + const fetchInto = (pathname, into) => async dispatch => { dispatch({ type: FETCH_STARTED, into, @@ -86,7 +81,10 @@ describe('dispatched', () => { const href = url.format(Object.assign({}, baseUrlObj, { pathname })); try { const res = await fetch(href); - if(res.status < HTTP_STATUS_OK_BOUNDS.min || res.status >= HTTP_STATUS_OK_BOUNDS.max) { + if ( + res.status < HTTP_STATUS_OK_BOUNDS.min || + res.status >= HTTP_STATUS_OK_BOUNDS.max + ) { dispatch({ type: FETCH_FAILED, into, @@ -101,8 +99,7 @@ describe('dispatched', () => { value: await res.text(), }); return; - } - catch(err) { + } catch (err) { dispatch({ type: FETCH_FAILED, into, @@ -113,14 +110,14 @@ describe('dispatched', () => { }; const OriginalEchoAlpha = ({ alpha }) => { - if(typeof alpha !== 'object') { + if (typeof alpha !== 'object') { return
???
; } const { status, err, value } = alpha; - if(status === FETCH_STARTED) { + if (status === FETCH_STARTED) { return
...
; } - if(status === FETCH_FAILED) { + if (status === FETCH_FAILED) { return
Error fetching beta (Reason: {err})
; } return
{value}
; @@ -129,19 +126,22 @@ describe('dispatched', () => { alpha: PropTypes.object, }; - const ConnectedEchoAlpha = connect(({ alpha }) => ({ alpha }))(OriginalEchoAlpha); + const ConnectedEchoAlpha = connect(({ alpha }) => ({ alpha }))( + OriginalEchoAlpha, + ); - const EchoAlpha = dispatched(({ value }, dispatch) => dispatch(fetchInto(value, 'alpha')))(ConnectedEchoAlpha); + const EchoAlpha = dispatched(({ value }, dispatch) => + dispatch(fetchInto(value, 'alpha')))(ConnectedEchoAlpha); const OriginalEchoBeta = ({ beta }) => { - if(typeof beta !== 'object') { + if (typeof beta !== 'object') { return
???
; } const { status, err, value } = beta; - if(status === FETCH_STARTED) { + if (status === FETCH_STARTED) { return
...
; } - if(status === FETCH_FAILED) { + if (status === FETCH_FAILED) { return
Error fetching beta (Reason: {err})
; } return
{value}
; @@ -150,22 +150,30 @@ describe('dispatched', () => { beta: PropTypes.object, }; - const ConnectedEchoBeta = connect(({ beta }) => ({ beta }))(OriginalEchoBeta); + const ConnectedEchoBeta = connect(({ beta }) => ({ beta }))( + OriginalEchoBeta, + ); - const EchoBeta = dispatched(({ value }, dispatch) => dispatch(fetchInto(value, 'beta')))(ConnectedEchoBeta); + const EchoBeta = dispatched(({ value }, dispatch) => + dispatch(fetchInto(value, 'beta')))(ConnectedEchoBeta); - const App = () =>
    -
  • -
  • -
; + const App = () => ( +
    +
  • +
  • +
+ ); const app = ; await prepare(app); const html = renderToStaticMarkup(app); - t.assert(html === '
  • echo /foo
  • echo /bar
', 'renders correct html'); - } - finally { + t.assert( + html === + '
  • echo /foo
  • echo /bar
', + 'renders correct html', + ); + } finally { echoHttpServer.close(); } }); diff --git a/src/tests/isReactCompositeComponent.spec.js b/src/tests/isReactCompositeComponent.spec.js index 2ba1a97..61e0532 100644 --- a/src/tests/isReactCompositeComponent.spec.js +++ b/src/tests/isReactCompositeComponent.spec.js @@ -1,3 +1,4 @@ +// @flow const { describe, it } = global; import t from 'tcomb'; import React from 'react'; @@ -26,7 +27,10 @@ describe('isReactCompositeComponent', () => { it('should not match functional component', () => { const C = () =>
; - t.assert(isReactCompositeComponent(C) === false, 'not match functional component'); + t.assert( + isReactCompositeComponent(C) === false, + 'not match functional component', + ); }); it('should match redux Provider', () => { diff --git a/src/tests/isThenable.spec.js b/src/tests/isThenable.spec.js index 82a054d..f3cb076 100644 --- a/src/tests/isThenable.spec.js +++ b/src/tests/isThenable.spec.js @@ -1,3 +1,4 @@ +// @flow const { describe, it } = global; import t from 'tcomb'; diff --git a/src/tests/prepare.spec.js b/src/tests/prepare.spec.js index 6c069e1..2843654 100644 --- a/src/tests/prepare.spec.js +++ b/src/tests/prepare.spec.js @@ -1,3 +1,4 @@ +// @flow const { describe, it } = global; import t from 'tcomb'; import sinon from 'sinon'; @@ -15,18 +16,24 @@ describe('prepare', () => { await doAsyncSideEffect(text); }); const App = prepared(prepareUsingProps)(({ text }) =>
{text}
); - await prepare(); - t.assert(prepareUsingProps.calledOnce, 'prepareUsingProps has been called exactly once'); - t.assert(equal( - prepareUsingProps.getCall(0).args, - [{ text: 'foo' }, {}], - ), 'prepareUsingProps has been called with correct arguments'); - t.assert(doAsyncSideEffect.calledOnce, 'doAsyncSideEffect has been called exactly once'); - t.assert(equal( - doAsyncSideEffect.getCall(0).args, - ['foo'], - ), 'doAsyncSideEffect has been called with correct arguments'); - const html = renderToStaticMarkup(); + await prepare(); + t.assert( + prepareUsingProps.calledOnce, + 'prepareUsingProps has been called exactly once', + ); + t.assert( + equal(prepareUsingProps.getCall(0).args, [{ text: 'foo' }, {}]), + 'prepareUsingProps has been called with correct arguments', + ); + t.assert( + doAsyncSideEffect.calledOnce, + 'doAsyncSideEffect has been called exactly once', + ); + t.assert( + equal(doAsyncSideEffect.getCall(0).args, ['foo']), + 'doAsyncSideEffect has been called with correct arguments', + ); + const html = renderToStaticMarkup(); t.assert(html === '
foo
', 'renders with correct html'); }); @@ -46,46 +53,69 @@ describe('prepare', () => { await doAsyncSideEffectForSecondChild(text); }); - const FirstChild = prepared(prepareUsingPropsForFirstChild)(({ text }) => + const FirstChild = prepared(prepareUsingPropsForFirstChild)(({ text }) => ( {text} - ); - const SecondChild = prepared(prepareUsingPropsForSecondChild)(({ text }) => - {text} - ); + )); + const SecondChild = prepared(prepareUsingPropsForSecondChild)(( + { text }, + ) => {text}); - const App = ({ texts }) =>
    -
  • -
  • -
; + const App = ({ texts }) => ( +
    +
  • +
  • +
+ ); App.propTypes = { texts: PropTypes.array, }; await prepare(); - t.assert(prepareUsingPropsForFirstChild.calledOnce, 'prepareUsingPropsForFirstChild has been called exactly once'); - t.assert(equal( - prepareUsingPropsForFirstChild.getCall(0).args, - [{ text: 'first' }, {}], - ), 'prepareUsingPropsForFirstChild has been called with correct arguments'); - t.assert(doAsyncSideEffectForFirstChild.calledOnce, 'doAsyncSideEffectForFirstChild has been called exactly once'); - t.assert(equal( - doAsyncSideEffectForFirstChild.getCall(0).args, - ['first'], - ), 'doAsyncSideEffectForFirstChild has been called with correct arguments'); + t.assert( + prepareUsingPropsForFirstChild.calledOnce, + 'prepareUsingPropsForFirstChild has been called exactly once', + ); + t.assert( + equal(prepareUsingPropsForFirstChild.getCall(0).args, [ + { text: 'first' }, + {}, + ]), + 'prepareUsingPropsForFirstChild has been called with correct arguments', + ); + t.assert( + doAsyncSideEffectForFirstChild.calledOnce, + 'doAsyncSideEffectForFirstChild has been called exactly once', + ); + t.assert( + equal(doAsyncSideEffectForFirstChild.getCall(0).args, ['first']), + 'doAsyncSideEffectForFirstChild has been called with correct arguments', + ); - t.assert(prepareUsingPropsForSecondChild.calledOnce, 'prepareUsingPropsForSecondChild has been called exactly once'); - t.assert(equal( - prepareUsingPropsForSecondChild.getCall(0).args, - [{ text: 'second' }, {}], - ), 'prepareUsingPropsForSecondChild has been called with correct arguments'); - t.assert(doAsyncSideEffectForSecondChild.calledOnce, 'doAsyncSideEffectForSecondChild has been called exactly once'); - t.assert(equal( - doAsyncSideEffectForSecondChild.getCall(0).args, - ['second'], - ), 'doAsyncSideEffectForSecondChild has been called with correct arguments'); + t.assert( + prepareUsingPropsForSecondChild.calledOnce, + 'prepareUsingPropsForSecondChild has been called exactly once', + ); + t.assert( + equal(prepareUsingPropsForSecondChild.getCall(0).args, [ + { text: 'second' }, + {}, + ]), + 'prepareUsingPropsForSecondChild has been called with correct arguments', + ); + t.assert( + doAsyncSideEffectForSecondChild.calledOnce, + 'doAsyncSideEffectForSecondChild has been called exactly once', + ); + t.assert( + equal(doAsyncSideEffectForSecondChild.getCall(0).args, ['second']), + 'doAsyncSideEffectForSecondChild has been called with correct arguments', + ); const html = renderToStaticMarkup(); - t.assert(html === '
  • first
  • second
'); // eslint-disable-line max-len + t.assert( + html === + '
  • first
  • second
', + ); // eslint-disable-line max-len }); }); diff --git a/src/tests/prepared.spec.js b/src/tests/prepared.spec.js index 3445a40..21e6510 100644 --- a/src/tests/prepared.spec.js +++ b/src/tests/prepared.spec.js @@ -1,3 +1,4 @@ +// @flow const { describe, it } = global; import sinon from 'sinon'; import t from 'tcomb'; @@ -36,23 +37,42 @@ describe('prepared', () => { const prepareUsingProps = sinon.spy(async ({ text }) => { await doAsyncSideEffect(text); }); - const PreparedCompositeComponent = prepared(prepareUsingProps, { pure: false })(OriginalCompositeComponent); - t.assert(!isPrepared(OriginalCompositeComponent), 'OriginalComponent is not prepared'); - t.assert(isPrepared(PreparedCompositeComponent), 'PreparedComponent is prepared'); + const PreparedCompositeComponent = prepared(prepareUsingProps, { + pure: false, + })(OriginalCompositeComponent); + t.assert( + !isPrepared(OriginalCompositeComponent), + 'OriginalComponent is not prepared', + ); + t.assert( + isPrepared(PreparedCompositeComponent), + 'PreparedComponent is prepared', + ); const prepare = getPrepare(PreparedCompositeComponent); - t.assert(typeof prepare === 'function', 'getPrepare(PreparedCompositeComponent) is a function'); + t.assert( + typeof prepare === 'function', + 'getPrepare(PreparedCompositeComponent) is a function', + ); await prepare({ text: 'foo' }); - t.assert(prepareUsingProps.calledOnce, 'prepareUsingProps has been called exactly once'); - t.assert(equal( - prepareUsingProps.getCall(0).args, - [{ text: 'foo' }], - ), 'prepareUsingProps has been called with correct arguments'); - t.assert(doAsyncSideEffect.calledOnce, 'doAsyncSideEffect has been called exactly once'); - t.assert(equal( - doAsyncSideEffect.getCall(0).args, - ['foo'], - ), 'doAsyncSideEffect has been called with correct arguments'); - const html = renderToStaticMarkup(); + t.assert( + prepareUsingProps.calledOnce, + 'prepareUsingProps has been called exactly once', + ); + t.assert( + equal(prepareUsingProps.getCall(0).args, [{ text: 'foo' }]), + 'prepareUsingProps has been called with correct arguments', + ); + t.assert( + doAsyncSideEffect.calledOnce, + 'doAsyncSideEffect has been called exactly once', + ); + t.assert( + equal(doAsyncSideEffect.getCall(0).args, ['foo']), + 'doAsyncSideEffect has been called with correct arguments', + ); + const html = renderToStaticMarkup( + , + ); t.assert(html === '
foo
', 'renders with correct html'); }); @@ -61,23 +81,42 @@ describe('prepared', () => { const prepareUsingProps = sinon.spy(async ({ text }) => { await doAsyncSideEffect(text); }); - const PreparedCompositeComponent = prepared(prepareUsingProps)(OriginalCompositePureComponent); - t.assert(!isPrepared(OriginalCompositePureComponent), 'OriginalComponent is not prepared'); - t.assert(isPrepared(PreparedCompositeComponent), 'PreparedComponent is prepared'); + const PreparedCompositeComponent = prepared(prepareUsingProps)( + OriginalCompositePureComponent, + ); + t.assert( + !isPrepared(OriginalCompositePureComponent), + 'OriginalComponent is not prepared', + ); + t.assert( + isPrepared(PreparedCompositeComponent), + 'PreparedComponent is prepared', + ); const prepare = getPrepare(PreparedCompositeComponent); - t.assert(typeof prepare === 'function', 'getPrepare(PreparedCompositeComponent) is a function'); + t.assert( + typeof prepare === 'function', + 'getPrepare(PreparedCompositeComponent) is a function', + ); await prepare({ text: 'foo' }); - t.assert(prepareUsingProps.calledOnce, 'prepareUsingProps has been called exactly once'); - t.assert(equal( - prepareUsingProps.getCall(0).args, - [{ text: 'foo' }], - ), 'prepareUsingProps has been called with correct arguments'); - t.assert(doAsyncSideEffect.calledOnce, 'doAsyncSideEffect has been called exactly once'); - t.assert(equal( - doAsyncSideEffect.getCall(0).args, - ['foo'], - ), 'doAsyncSideEffect has been called with correct arguments'); - const html = renderToStaticMarkup(); + t.assert( + prepareUsingProps.calledOnce, + 'prepareUsingProps has been called exactly once', + ); + t.assert( + equal(prepareUsingProps.getCall(0).args, [{ text: 'foo' }]), + 'prepareUsingProps has been called with correct arguments', + ); + t.assert( + doAsyncSideEffect.calledOnce, + 'doAsyncSideEffect has been called exactly once', + ); + t.assert( + equal(doAsyncSideEffect.getCall(0).args, ['foo']), + 'doAsyncSideEffect has been called with correct arguments', + ); + const html = renderToStaticMarkup( + , + ); t.assert(html === '
foo
', 'renders with correct html'); }); @@ -86,23 +125,42 @@ describe('prepared', () => { const prepareUsingProps = sinon.spy(async ({ text }) => { await doAsyncSideEffect(text); }); - const PreparedCompositeComponent = prepared(prepareUsingProps)(OriginalArrowComponent); - t.assert(!isPrepared(OriginalArrowComponent), 'OriginalComponent is not prepared'); - t.assert(isPrepared(PreparedCompositeComponent), 'PreparedComponent is prepared'); + const PreparedCompositeComponent = prepared(prepareUsingProps)( + OriginalArrowComponent, + ); + t.assert( + !isPrepared(OriginalArrowComponent), + 'OriginalComponent is not prepared', + ); + t.assert( + isPrepared(PreparedCompositeComponent), + 'PreparedComponent is prepared', + ); const prepare = getPrepare(PreparedCompositeComponent); - t.assert(typeof prepare === 'function', 'getPrepare(PreparedCompositeComponent) is a function'); + t.assert( + typeof prepare === 'function', + 'getPrepare(PreparedCompositeComponent) is a function', + ); await prepare({ text: 'foo' }); - t.assert(prepareUsingProps.calledOnce, 'prepareUsingProps has been called exactly once'); - t.assert(equal( - prepareUsingProps.getCall(0).args, - [{ text: 'foo' }], - ), 'prepareUsingProps has been called with correct arguments'); - t.assert(doAsyncSideEffect.calledOnce, 'doAsyncSideEffect has been called exactly once'); - t.assert(equal( - doAsyncSideEffect.getCall(0).args, - ['foo'], - ), 'doAsyncSideEffect has been called with correct arguments'); - const html = renderToStaticMarkup(); + t.assert( + prepareUsingProps.calledOnce, + 'prepareUsingProps has been called exactly once', + ); + t.assert( + equal(prepareUsingProps.getCall(0).args, [{ text: 'foo' }]), + 'prepareUsingProps has been called with correct arguments', + ); + t.assert( + doAsyncSideEffect.calledOnce, + 'doAsyncSideEffect has been called exactly once', + ); + t.assert( + equal(doAsyncSideEffect.getCall(0).args, ['foo']), + 'doAsyncSideEffect has been called with correct arguments', + ); + const html = renderToStaticMarkup( + , + ); t.assert(html === '
foo
', 'renders with correct html'); }); }); diff --git a/src/utils/isReactCompositeComponent.js b/src/utils/isReactCompositeComponent.js index 6e34eca..307da94 100644 --- a/src/utils/isReactCompositeComponent.js +++ b/src/utils/isReactCompositeComponent.js @@ -1,11 +1,12 @@ -export default function isReactCompositeComponent(type) { - if(typeof type !== 'function') { +// @flow +export default function isReactCompositeComponent(type: any) { + if (typeof type !== 'function') { return false; } - if(typeof type.prototype !== 'object') { + if (typeof type.prototype !== 'object') { return false; } - if(typeof type.prototype.render !== 'function') { + if (typeof type.prototype.render !== 'function') { return false; } return true; diff --git a/src/utils/isThenable.js b/src/utils/isThenable.js index eb2f309..ce4b4f4 100644 --- a/src/utils/isThenable.js +++ b/src/utils/isThenable.js @@ -1,4 +1,5 @@ -function isThenable(p) { +// @flow +function isThenable(p: any) { return p && typeof p === 'object' && typeof p.then === 'function'; } diff --git a/yarn.lock b/yarn.lock index 630a05e..243212f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,8 +3,8 @@ abbrev@1: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + version "1.1.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" accepts@^1.2.2: version "1.3.3" @@ -32,8 +32,8 @@ ajv-keywords@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" ajv@^4.7.0: - version "4.11.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.2.tgz#f166c3c11cbc6cb9dcc102a5bcfe5b72c95287e6" + version "4.11.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.3.tgz#ce30bdb90d1254f762c75af915fb3a63e7183d22" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" @@ -62,8 +62,8 @@ anymatch@^1.3.0: micromatch "^2.1.5" aproba@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + version "1.1.1" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" are-we-there-yet@~1.1.2: version "1.1.2" @@ -142,16 +142,16 @@ aws-sign2@~0.6.0: resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" aws4@^1.2.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" babel-cli@^6.22.2: - version "6.22.2" - resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.22.2.tgz#3f814c8acf52759082b8fedd9627f938936ab559" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.23.0.tgz#52ff946a2b0f64645c35e7bd5eea267aa0948c0f" dependencies: - babel-core "^6.22.1" - babel-polyfill "^6.22.0" - babel-register "^6.22.0" + babel-core "^6.23.0" + babel-polyfill "^6.23.0" + babel-register "^6.23.0" babel-runtime "^6.22.0" commander "^2.8.1" convert-source-map "^1.1.0" @@ -174,19 +174,19 @@ babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.22.0, babel-core@^6.22.1: - version "6.22.1" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648" +babel-core@^6.23.0: + version "6.23.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.23.1.tgz#c143cb621bb2f621710c220c5d579d15b8a442df" dependencies: babel-code-frame "^6.22.0" - babel-generator "^6.22.0" - babel-helpers "^6.22.0" - babel-messages "^6.22.0" - babel-register "^6.22.0" + babel-generator "^6.23.0" + babel-helpers "^6.23.0" + babel-messages "^6.23.0" + babel-register "^6.23.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.1" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.1" + babel-types "^6.23.0" babylon "^6.11.0" convert-source-map "^1.1.0" debug "^2.1.1" @@ -208,17 +208,18 @@ babel-eslint@^7.0.0: babylon "^6.13.0" lodash.pickby "^4.6.0" -babel-generator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805" +babel-generator@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.23.0.tgz#6b8edab956ef3116f79d8c84c5a3c05f32a74bc5" dependencies: - babel-messages "^6.22.0" + babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.23.0" detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.2.0" source-map "^0.5.0" + trim-right "^1.0.1" babel-helper-builder-binary-assignment-operator-visitor@^6.22.0: version "6.22.0" @@ -228,12 +229,12 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.22.0" -babel-helper-builder-react-jsx@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.22.0.tgz#aafb31913e47761fd4d0b6987756a144a65fca0d" +babel-helper-builder-react-jsx@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.23.0.tgz#d53fc8c996e0bc56d0de0fc4cc55a7138395ea4b" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.23.0" esutils "^2.0.0" lodash "^4.2.0" @@ -246,13 +247,13 @@ babel-helper-call-delegate@^6.22.0: babel-traverse "^6.22.0" babel-types "^6.22.0" -babel-helper-define-map@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.22.0.tgz#9544e9502b2d6dfe7d00ff60e82bd5a7a89e95b7" +babel-helper-define-map@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.23.0.tgz#1444f960c9691d69a2ced6a205315f8fd00804e7" dependencies: - babel-helper-function-name "^6.22.0" + babel-helper-function-name "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.23.0" lodash "^4.2.0" babel-helper-explode-assignable-expression@^6.22.0: @@ -263,15 +264,15 @@ babel-helper-explode-assignable-expression@^6.22.0: babel-traverse "^6.22.0" babel-types "^6.22.0" -babel-helper-function-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.22.0.tgz#51f1bdc4bb89b15f57a9b249f33d742816dcbefc" +babel-helper-function-name@^6.22.0, babel-helper-function-name@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.23.0.tgz#25742d67175c8903dbe4b6cb9d9e1fcb8dcf23a6" dependencies: babel-helper-get-function-arity "^6.22.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" babel-helper-get-function-arity@^6.22.0: version "6.22.0" @@ -287,12 +288,12 @@ babel-helper-hoist-variables@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.22.0" -babel-helper-optimise-call-expression@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.22.0.tgz#f8d5d4b40a6e2605a6a7f9d537b581bea3756d15" +babel-helper-optimise-call-expression@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.23.0.tgz#f3ee7eed355b4282138b33d02b78369e470622f5" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.23.0" babel-helper-regex@^6.22.0: version "6.22.0" @@ -312,27 +313,27 @@ babel-helper-remap-async-to-generator@^6.22.0: babel-traverse "^6.22.0" babel-types "^6.22.0" -babel-helper-replace-supers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.22.0.tgz#1fcee2270657548908c34db16bcc345f9850cf42" +babel-helper-replace-supers@^6.22.0, babel-helper-replace-supers@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.23.0.tgz#eeaf8ad9b58ec4337ca94223bacdca1f8d9b4bfd" dependencies: - babel-helper-optimise-call-expression "^6.22.0" - babel-messages "^6.22.0" + babel-helper-optimise-call-expression "^6.23.0" + babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" -babel-helpers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c" +babel-helpers@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.23.0.tgz#4f8f2e092d0b6a8808a4bde79c27f1e2ecf0d992" dependencies: babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.23.0" -babel-messages@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575" +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" @@ -354,7 +355,7 @@ babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" -babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13: +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" @@ -379,13 +380,13 @@ babel-plugin-transform-async-to-generator@^6.22.0: babel-runtime "^6.22.0" babel-plugin-transform-class-properties@^6.18.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.22.0.tgz#aa78f8134495c7de06c097118ba061844e1dc1d8" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.23.0.tgz#187b747ee404399013563c993db038f34754ac3b" dependencies: - babel-helper-function-name "^6.22.0" + babel-helper-function-name "^6.23.0" babel-plugin-syntax-class-properties "^6.8.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.23.0" babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" @@ -400,28 +401,28 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.22.0.tgz#00d6e3a0bebdcfe7536b9d653b44a9141e63e47e" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.23.0.tgz#e48895cf0b375be148cd7c8879b422707a053b51" dependencies: babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" lodash "^4.2.0" babel-plugin-transform-es2015-classes@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.22.0.tgz#54d44998fd823d9dca15292324161c331c1b6f14" - dependencies: - babel-helper-define-map "^6.22.0" - babel-helper-function-name "^6.22.0" - babel-helper-optimise-call-expression "^6.22.0" - babel-helper-replace-supers "^6.22.0" - babel-messages "^6.22.0" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.23.0.tgz#49b53f326202a2fd1b3bbaa5e2edd8a4f78643c1" + dependencies: + babel-helper-define-map "^6.23.0" + babel-helper-function-name "^6.23.0" + babel-helper-optimise-call-expression "^6.23.0" + babel-helper-replace-supers "^6.23.0" + babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" babel-plugin-transform-es2015-computed-properties@^6.22.0: version "6.22.0" @@ -431,8 +432,8 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0: babel-template "^6.22.0" babel-plugin-transform-es2015-destructuring@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.22.0.tgz#8e0af2f885a0b2cf999d47c4c1dd23ce88cfa4c6" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" dependencies: babel-runtime "^6.22.0" @@ -444,8 +445,8 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0: babel-types "^6.22.0" babel-plugin-transform-es2015-for-of@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.22.0.tgz#180467ad63aeea592a1caeee4bf1c8b3e2616265" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" dependencies: babel-runtime "^6.22.0" @@ -472,29 +473,29 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0: babel-template "^6.22.0" babel-plugin-transform-es2015-modules-commonjs@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.23.0.tgz#cba7aa6379fb7ec99250e6d46de2973aaffa7b92" dependencies: babel-plugin-transform-strict-mode "^6.22.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-types "^6.23.0" babel-plugin-transform-es2015-modules-systemjs@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.22.0.tgz#810cd0cd025a08383b84236b92c6e31f88e644ad" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.23.0.tgz#ae3469227ffac39b0310d90fec73bfdc4f6317b0" dependencies: babel-helper-hoist-variables "^6.22.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.23.0" babel-plugin-transform-es2015-modules-umd@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.23.0.tgz#8d284ae2e19ed8fe21d2b1b26d6e7e0fcd94f0f1" dependencies: babel-plugin-transform-es2015-modules-amd "^6.22.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.23.0" babel-plugin-transform-es2015-object-super@^6.22.0: version "6.22.0" @@ -504,15 +505,15 @@ babel-plugin-transform-es2015-object-super@^6.22.0: babel-runtime "^6.22.0" babel-plugin-transform-es2015-parameters@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.22.0.tgz#57076069232019094f27da8c68bb7162fe208dbb" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.23.0.tgz#3a2aabb70c8af945d5ce386f1a4250625a83ae3b" dependencies: babel-helper-call-delegate "^6.22.0" babel-helper-get-function-arity "^6.22.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" babel-plugin-transform-es2015-shorthand-properties@^6.22.0: version "6.22.0" @@ -542,8 +543,8 @@ babel-plugin-transform-es2015-template-literals@^6.22.0: babel-runtime "^6.22.0" babel-plugin-transform-es2015-typeof-symbol@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.22.0.tgz#87faf2336d3b6a97f68c4d906b0cd0edeae676e1" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" dependencies: babel-runtime "^6.22.0" @@ -571,15 +572,15 @@ babel-plugin-transform-flow-strip-types@^6.22.0: babel-runtime "^6.22.0" babel-plugin-transform-object-rest-spread@^6.16.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz#1d419b55e68d2e4f64a5ff3373bd67d73c8e83bc" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-react-display-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.22.0.tgz#077197520fa8562b8d3da4c3c4b0b1bdd7853f26" +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" @@ -597,11 +598,11 @@ babel-plugin-transform-react-jsx-source@^6.22.0: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-react-jsx@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.22.0.tgz#48556b7dd4c3fe97d1c943bcd54fc3f2561c1817" +babel-plugin-transform-react-jsx@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.23.0.tgz#23e892f7f2e759678eb5e4446a8f8e94e81b3470" dependencies: - babel-helper-builder-react-jsx "^6.22.0" + babel-helper-builder-react-jsx "^6.23.0" babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" @@ -612,8 +613,8 @@ babel-plugin-transform-regenerator@^6.22.0: regenerator-transform "0.9.8" babel-plugin-transform-runtime@^6.15.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.22.0.tgz#10968d760bbf6517243081eec778e10fa828551c" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" dependencies: babel-runtime "^6.22.0" @@ -624,9 +625,9 @@ babel-plugin-transform-strict-mode@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.22.0" -babel-polyfill@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.22.0.tgz#1ac99ebdcc6ba4db1e2618c387b2084a82154a3b" +babel-polyfill@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" dependencies: babel-runtime "^6.22.0" core-js "^2.4.0" @@ -674,6 +675,12 @@ babel-preset-es2017@^6.22.0: babel-plugin-syntax-trailing-function-commas "^6.22.0" babel-plugin-transform-async-to-generator "^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-latest@^6.16.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-preset-latest/-/babel-preset-latest-6.22.0.tgz#47b800531350a3dc69126e8c375a40655cd1eeff" @@ -683,22 +690,21 @@ babel-preset-latest@^6.16.0: babel-preset-es2017 "^6.22.0" babel-preset-react@^6.16.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.22.0.tgz#7bc97e2d73eec4b980fb6b4e4e0884e81ccdc165" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.23.0.tgz#eb7cee4de98a3f94502c28565332da9819455195" dependencies: - babel-plugin-syntax-flow "^6.3.13" babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-flow-strip-types "^6.22.0" - babel-plugin-transform-react-display-name "^6.22.0" - babel-plugin-transform-react-jsx "^6.22.0" + babel-plugin-transform-react-display-name "^6.23.0" + babel-plugin-transform-react-jsx "^6.23.0" 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.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63" +babel-register@^6.22.0, babel-register@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.23.0.tgz#c9aa3d4cca94b51da34826c4a0f9e08145d74ff3" dependencies: - babel-core "^6.22.0" + babel-core "^6.23.0" babel-runtime "^6.22.0" core-js "^2.4.0" home-or-tmp "^2.0.0" @@ -707,39 +713,39 @@ babel-register@^6.22.0: source-map-support "^0.4.2" babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611" + 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.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb" +babel-template@^6.22.0, babel-template@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.23.0.tgz#04d4f270adbb3aa704a8143ae26faa529238e638" dependencies: babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" babylon "^6.11.0" lodash "^4.2.0" -babel-traverse@^6.15.0, babel-traverse@^6.22.0, babel-traverse@^6.22.1: - version "6.22.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" +babel-traverse@^6.15.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: + version "6.23.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48" dependencies: babel-code-frame "^6.22.0" - babel-messages "^6.22.0" + babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.23.0" babylon "^6.15.0" debug "^2.2.0" globals "^9.0.0" invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.15.0, babel-types@^6.19.0, babel-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" +babel-types@^6.15.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" dependencies: babel-runtime "^6.22.0" esutils "^2.0.2" @@ -747,8 +753,8 @@ babel-types@^6.15.0, babel-types@^6.19.0, babel-types@^6.22.0: to-fast-properties "^1.0.1" babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" + version "6.16.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" balanced-match@^0.4.1: version "0.4.2" @@ -904,8 +910,8 @@ content-type@^1.0.0: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" convert-source-map@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" + version "1.4.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3" cookies@~0.6.1: version "0.6.2" @@ -945,8 +951,8 @@ dashdash@^1.12.0: assert-plus "^1.0.0" debug@*, debug@^2.1.1, debug@^2.2.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" + version "2.6.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" dependencies: ms "0.7.2" @@ -995,7 +1001,7 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@~1.1.0: +depd@1.1.0, depd@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" @@ -1131,16 +1137,18 @@ eslint-plugin-babel@^4.0.1: resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.0.1.tgz#77de74dabd67a6bef3b16bf258f5804e971e7349" eslint-plugin-react@^6.4.1: - version "6.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.9.0.tgz#54c2e9906b76f9d10142030bdc34e9d6840a0bb2" + version "6.10.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.0.tgz#9c48b48d101554b5355413e7c64238abde6ef1ef" dependencies: array.prototype.find "^2.0.1" doctrine "^1.2.2" + has "^1.0.1" jsx-ast-utils "^1.3.4" + object.assign "^4.0.4" eslint@^3.8.1: - version "3.15.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.15.0.tgz#bdcc6a6c5ffe08160e7b93c066695362a91e30f2" + version "3.16.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.16.1.tgz#9bc31fc7341692cf772e80607508f67d711c5609" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" @@ -1184,9 +1192,9 @@ espree@^3.4.0: acorn "4.0.4" acorn-jsx "^3.0.0" -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" +esprima@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" esrecurse@^4.1.0: version "4.1.0" @@ -1297,6 +1305,10 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" +flow-bin@^0.40.0: + version "0.40.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.40.0.tgz#e10d60846d923124e47f548f16ba60fd8baff5a5" + for-in@^0.1.5: version "0.1.6" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" @@ -1342,8 +1354,8 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: - version "1.0.17" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558" + version "1.1.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" dependencies: nan "^2.3.0" node-pre-gyp "^0.6.29" @@ -1365,13 +1377,13 @@ fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.1.0: +function-bind@^1.0.2, function-bind@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" gauge@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" + version "2.7.3" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -1380,7 +1392,6 @@ gauge@~2.7.1: signal-exit "^3.0.0" string-width "^1.0.1" strip-ansi "^3.0.1" - supports-color "^0.2.0" wide-align "^1.1.0" generate-function@^2.0.0: @@ -1435,8 +1446,8 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: path-is-absolute "^1.0.0" globals@^9.0.0, globals@^9.14.0: - version "9.14.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" + version "9.16.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.16.0.tgz#63e903658171ec2d9f51b1d31de5e2b8dc01fb80" globby@^5.0.0: version "5.0.0" @@ -1484,6 +1495,12 @@ has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -1516,11 +1533,12 @@ http-assert@^1.1.0: http-errors "~1.4.0" http-errors@^1.2.8: - version "1.5.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" dependencies: + depd "1.1.0" inherits "2.0.3" - setprototypeof "1.0.2" + setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" http-errors@~1.4.0: @@ -1543,8 +1561,8 @@ iconv-lite@~0.4.13: resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" ignore@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.2.tgz#1c51e1ef53bab6ddc15db4d9ac4ec139eceb3410" + version "3.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.4.tgz#4055e03596729a8fabe45a43c100ad5ed815c4e8" imurmurhash@^0.1.4: version "0.1.4" @@ -1699,8 +1717,10 @@ is-property@^1.0.0: resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" is-regex@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.3.tgz#0d55182bddf9f2fde278220aec3a75642c908637" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" is-resolvable@^1.0.0: version "1.0.0" @@ -1752,15 +1772,15 @@ js-tokens@^3.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" js-yaml@^3.5.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + version "3.8.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.1.tgz#782ba50200be7b9e5a8537001b7804db3ad02628" dependencies: argparse "^1.0.7" - esprima "^2.6.0" + esprima "^3.1.1" jsbn@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" jsesc@^1.3.0: version "1.3.0" @@ -1833,8 +1853,8 @@ koa-is-json@^1.0.0: resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" koa@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/koa/-/koa-1.2.4.tgz#6ef6d17a7bea8ec778a8572b55a0d0562e488654" + version "1.2.5" + resolved "https://registry.yarnpkg.com/koa/-/koa-1.2.5.tgz#2b1bf59dc1f2fdd7b756e8a4f11a55eb57db6a09" dependencies: accepts "^1.2.2" co "^4.4.0" @@ -2080,10 +2100,18 @@ object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-keys@^1.0.8: +object-keys@^1.0.10, object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object.assign@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + object-keys "^1.0.10" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -2165,6 +2193,10 @@ path-is-inside@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -2192,8 +2224,8 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" private@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" + 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" @@ -2214,8 +2246,8 @@ punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" qs@~6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" + version "6.3.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.1.tgz#918c0b3bcd36679772baf135b1acb4c1651ed79d" randomatic@^1.1.3: version "1.1.6" @@ -2225,13 +2257,13 @@ randomatic@^1.1.3: kind-of "^3.0.2" rc@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" + version "1.1.7" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" dependencies: deep-extend "~0.4.0" ini "~1.3.0" minimist "^1.2.0" - strip-json-comments "~1.0.4" + strip-json-comments "~2.0.1" react-dom@^15.4.2: version "15.4.2" @@ -2242,8 +2274,8 @@ react-dom@^15.4.2: object-assign "^4.1.0" react-redux@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.2.tgz#3d9878f5f71c6fafcd45de1fbb162ea31f389814" + version "5.0.3" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.3.tgz#86c3b68d56e74294a42e2a740ab66117ef6c019f" dependencies: hoist-non-react-statics "^1.0.3" invariant "^2.0.0" @@ -2260,8 +2292,8 @@ react@^15.4.2: object-assign "^4.1.0" "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" + version "2.2.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.3.tgz#9cf49463985df016c8ae8813097a9293a9b33729" dependencies: buffer-shims "^1.0.0" core-util-is "~1.0.0" @@ -2324,8 +2356,8 @@ regenerate@^1.2.1: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" regenerator-runtime@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" + version "0.10.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" regenerator-transform@0.9.8: version "0.9.8" @@ -2411,8 +2443,10 @@ resolve-from@^1.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" resolve@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" + version "1.3.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.1.tgz#5d0a1632609b6b00a22284293db1d5d973676314" + dependencies: + path-parse "^1.0.5" restore-cursor@^1.0.1: version "1.0.1" @@ -2421,7 +2455,13 @@ restore-cursor@^1.0.1: exit-hook "^1.0.0" onetime "^1.0.0" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@~2.5.1, rimraf@~2.5.4: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + dependencies: + glob "^7.0.5" + +rimraf@~2.5.1, rimraf@~2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: @@ -2457,9 +2497,9 @@ setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" -setprototypeof@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" shelljs@^0.7.5: version "0.7.6" @@ -2562,10 +2602,6 @@ strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" -strip-json-comments@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" - strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -2576,10 +2612,6 @@ supports-color@3.1.2: dependencies: has-flag "^1.0.0" -supports-color@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -2621,8 +2653,8 @@ tar@~2.2.1: inherits "2" tcomb@^3.2.15: - version "3.2.16" - resolved "https://registry.yarnpkg.com/tcomb/-/tcomb-3.2.16.tgz#345782f2f060839a2df30480209b1afc8b16e1fa" + version "3.2.17" + resolved "https://registry.yarnpkg.com/tcomb/-/tcomb-3.2.17.tgz#4466b4ae881a6efc6a2b3017a4ae3773a646e887" text-table@~0.2.0: version "0.2.0" @@ -2642,6 +2674,10 @@ tough-cookie@~2.3.0: dependencies: punycode "^1.4.1" +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + tryit@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"