Upgrade to React 16 and Enzyme 3

This commit is contained in:
William Durand 2017-11-23 14:52:10 +01:00
Родитель d0ded682d8
Коммит 7f319a5ed4
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: CBDCA19BD70C2DAD
59 изменённых файлов: 354 добавлений и 353 удалений

Просмотреть файл

@ -180,24 +180,25 @@
"normalize.css": "7.0.0",
"normalizr": "3.2.2",
"prop-types": "15.6.0",
"raf": "3.4.0",
"raven": "2.2.1",
"raven-js": "3.20.1",
"rc-tooltip": "3.7.0",
"react": "15.6.2",
"react-addons-css-transition-group": "15.6.2",
"react": "16.1.1",
"react-autosuggest": "9.3.2",
"react-cookie": "1.0.5",
"react-dom": "15.6.2",
"react-dom": "16.1.1",
"react-helmet": "5.2.0",
"react-nested-status": "0.1.2",
"react-nested-status": "0.2.1",
"react-onclickoutside": "6.7.0",
"react-photoswipe": "1.3.0",
"react-redux": "5.0.6",
"react-router": "2.8.1",
"react-router": "3.2.0",
"react-router-redux": "4.0.8",
"react-router-scroll": "0.4.4",
"react-super-responsive-table": "0.3.0",
"react-textarea-autosize": "5.2.1",
"react-transition-group": "1.x",
"redux": "3.7.2",
"redux-logger": "3.0.6",
"redux-saga": "0.16.0",
@ -238,7 +239,8 @@
"cookie": "^0.3.1",
"css-loader": "^0.28.3",
"deepcopy": "^0.6.3",
"enzyme": "^2.8.2",
"enzyme": "^3.2.0",
"enzyme-adapter-react-16": "^1.1.0",
"eslint": "^4.5.0",
"eslint-config-amo": "^0.2.0",
"eslint-plugin-promise": "^3.5.0",
@ -251,7 +253,7 @@
"intl": "^1.2.5",
"intl-locales-supported": "^1.0.0",
"jest": "^21.0.2",
"jest-enzyme": "^3.8.3",
"jest-enzyme": "^4.0.1",
"json-loader": "^0.5.4",
"mock-express-request": "^0.2.0",
"mock-express-response": "^0.2.0",
@ -263,11 +265,10 @@
"po2json": "^0.4.5",
"postcss-loader": "^2.0.6",
"potools": "^0.1.0",
"react-addons-test-utils": "^15.5.1",
"react-hot-loader": "^3.1.1",
"react-test-renderer": "^15.5.4",
"react-test-renderer": "^16.1.1",
"react-transform-hmr": "^1.0.4",
"redux-devtools": "^3.3.2",
"redux-devtools": "^3.4.1",
"redux-saga-tester": "^1.0.372",
"require-uncached": "^1.0.3",
"rimraf": "^2.6.1",

Просмотреть файл

@ -324,8 +324,8 @@ export const extractId = (ownProps: Props) => {
};
export default compose(
connect(mapStateToProps),
translate({ withRef: true }),
withFixedErrorHandler({ fileName: __filename, extractId }),
withRouter,
connect(mapStateToProps),
translate(),
withFixedErrorHandler({ fileName: __filename, extractId }),
)(AddonReviewListBase);

Просмотреть файл

@ -1,4 +1,5 @@
import React, { PropTypes } from 'react';
import PropTypes from 'prop-types';
import React from 'react';
import { connect } from 'react-redux';
import { compose } from 'redux';

Просмотреть файл

@ -1,6 +1,7 @@
/* global document */
import 'babel-polyfill';
import 'raf/polyfill';
import { oneLine } from 'common-tags';
import config from 'config';
import FastClick from 'fastclick';

Просмотреть файл

@ -2,6 +2,7 @@ import fs from 'fs';
import path from 'path';
import 'babel-polyfill';
import 'raf/polyfill';
import { oneLine } from 'common-tags';
import defaultConfig from 'config';
import Express from 'express';

Просмотреть файл

@ -4,7 +4,7 @@ import classNames from 'classnames';
import { sprintf } from 'jed';
import React from 'react';
import PropTypes from 'prop-types';
import ReactCSSTransitionGroup from 'react-addons-css-transition-group';
import ReactCSSTransitionGroup from 'react-transition-group/CSSTransitionGroup';
import { connect } from 'react-redux';
import { compose } from 'redux';

Просмотреть файл

@ -1,5 +1,6 @@
/* eslint-disable react/no-danger */
import React, { PropTypes } from 'react';
import React from 'react';
import PropTypes from 'prop-types';
import { compose } from 'redux';
import { connect } from 'react-redux';

Просмотреть файл

@ -2,6 +2,8 @@ import sinon from 'sinon';
import config from 'config';
import areIntlLocalesSupported from 'intl-locales-supported';
import values from 'object.values';
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
// Side-effects from imports are quite unfortunate but this is required
// to get all of the cool jest + enzyme integration for calls like:
@ -9,6 +11,7 @@ import values from 'object.values';
// See: github.com/mozilla/addons-frontend/pull/2540#discussion_r120926107
import 'jest-enzyme';
Enzyme.configure({ adapter: new Adapter() });
if (!Object.values) {
values.shim();

Просмотреть файл

@ -5,7 +5,7 @@ import {
scryRenderedComponentsWithType,
findRenderedComponentWithType,
renderIntoDocument,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { Provider } from 'react-redux';
import { match } from 'react-router';

Просмотреть файл

@ -585,9 +585,14 @@ describe(__filename, () => {
it('resets the page after submitting a review', () => {
const router = { push: sinon.stub() };
dispatchAddon({ ...fakeAddon });
const location = { query: { page: 2 } };
const root = render({ reviews: null, router, location });
dispatchAddon({ ...fakeAddon });
const root = render({ reviews: null, location });
// This makes sure the router is passed to the base component in order to
// test it because Enzyme v3 does not let us pass it via `render()`.
root.setProps({ router });
const manager = root.find(RatingManager);
expect(manager).toHaveProp('onReviewSubmitted');

Просмотреть файл

@ -105,7 +105,11 @@ describe(__filename, () => {
function render(props = {}, options = {}) {
return shallowUntilTarget(
<Category {...renderProps(props, options)} />,
CategoryBase
CategoryBase,
// TODO: ideally, we would like to enable the lifecycle methods, but it
// produces unexpected errors, related to Enzyme 3.
// See: http://airbnb.io/enzyme/docs/guides/migration-from-2-to-3.html#lifecycle-methods.
{ shallowOptions: { disableLifecycleMethods: true } }
);
}

Просмотреть файл

@ -57,7 +57,7 @@ describe(__filename, () => {
const root = render();
expect(root.find(Button)).toHaveLength(1);
expect(root.find(Button)).toHaveProp('href', 'https://paypal.me/babar');
expect(root.find(Button).children()).toContain('Contribute now');
expect(root.find(Button).children().at(1)).toHaveText('Contribute now');
expect(root.find(Button)).toHaveProp('target', '_blank');
expect(root.find(Button)).toHaveProp('rel', 'noopener noreferrer');
});

Просмотреть файл

@ -43,7 +43,7 @@ describe(__filename, () => {
expect(root.find('.Header-title-wrapper')).toHaveTagName('h1');
expect(root.find('.Header-title').type()).toEqual(Link);
expect(root.find('.Header-title .visually-hidden').childAt(0))
.toContain('Firefox Add-ons');
.toHaveText('Firefox Add-ons');
});
it('always renders a link in the header when not on homepage', () => {
@ -54,7 +54,7 @@ describe(__filename, () => {
expect(root.find('h1')).toHaveLength(0);
expect(root.find('.Header-title').type()).toEqual(Link);
expect(root.find('.Header-title .visually-hidden').childAt(0))
.toContain('Firefox Add-ons');
.toHaveText('Firefox Add-ons');
});
it('displays `login` text when user is not signed in', () => {

Просмотреть файл

@ -3,7 +3,7 @@ import {
Simulate,
renderIntoDocument,
findRenderedComponentWithType,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { findDOMNode } from 'react-dom';
import { Provider } from 'react-redux';

Просмотреть файл

@ -2,7 +2,7 @@ import React from 'react';
import {
findRenderedComponentWithType,
renderIntoDocument,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { findDOMNode } from 'react-dom';
import { Link as ReactRouterLink } from 'react-router';

Просмотреть файл

@ -2,7 +2,7 @@ import React from 'react';
import {
renderIntoDocument,
findRenderedComponentWithType,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { findDOMNode } from 'react-dom';
import { Provider } from 'react-redux';

Просмотреть файл

@ -2,7 +2,7 @@ import React from 'react';
import {
findRenderedComponentWithType,
renderIntoDocument,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import translate from 'core/i18n/translate';
import { setAuthToken } from 'core/actions';

Просмотреть файл

@ -82,7 +82,8 @@ describe(__filename, () => {
// this case, the textarea.)
const root = renderMount();
root.find('.ReportAbuseButton-show-more').simulate('click', fakeEvent);
root.find('button.ReportAbuseButton-show-more')
.simulate('click', fakeEvent);
sinon.assert.called(fakeEvent.preventDefault);
expect(root.find('.ReportAbuseButton--is-expanded')).toHaveLength(1);
@ -94,7 +95,8 @@ describe(__filename, () => {
// this case, the textarea.)
const root = renderMount();
root.find('.ReportAbuseButton-show-more').simulate('click', fakeEvent);
root.find('button.ReportAbuseButton-show-more')
.simulate('click', fakeEvent);
root.find('.ReportAbuseButton-dismiss-report')
.simulate('click', fakeEvent);
@ -106,24 +108,25 @@ describe(__filename, () => {
it('disables the submit button if there is no abuse report', () => {
const root = renderShallow();
expect(root.find('.ReportAbuseButton-send-report')).toHaveProp('disabled');
expect(root.find('.ReportAbuseButton-send-report').first())
.toHaveProp('disabled');
});
it('disables the submit button if text in the textarea is removed', () => {
const root = renderMount();
// This simulates entering text into the textarea.
const textarea = root.find('.ReportAbuseButton-textarea textarea');
textarea.node.value = 'add-on ate my homework!';
const textarea = root.find('.ReportAbuseButton-textarea > textarea');
textarea.instance().value = 'add-on ate my homework!';
textarea.simulate('change');
expect(root.find('.ReportAbuseButton-send-report').prop('disabled'))
expect(root.find('.ReportAbuseButton-send-report').first().prop('disabled'))
.toEqual(false);
textarea.node.value = '';
textarea.instance().value = '';
textarea.simulate('change');
expect(root.find('.ReportAbuseButton-send-report').prop('disabled'))
expect(root.find('.ReportAbuseButton-send-report').first().prop('disabled'))
.toEqual(true);
});
@ -140,11 +143,12 @@ describe(__filename, () => {
// Expand the view so we can test that it wasn't contracted when
// clicking on the disabled "dismiss" link.
root.find('.ReportAbuseButton-show-more').simulate('click', fakeEvent);
root.find('button.ReportAbuseButton-show-more')
.simulate('click', fakeEvent);
expect(root.find('.ReportAbuseButton--is-expanded')).toHaveLength(1);
const dismissButton = root.find('.ReportAbuseButton-dismiss-report');
const sendButton = root.find('.ReportAbuseButton-send-report');
const sendButton = root.find('button.ReportAbuseButton-send-report');
expect(dismissButton)
.toHaveClassName('ReportAbuseButton-dismiss-report--disabled');
@ -168,7 +172,7 @@ describe(__filename, () => {
expect(root.find('.ReportAbuseButton--report-sent')).toHaveLength(1);
expect(root.find('.ReportAbuseButton-show-more')).toHaveLength(0);
expect(root.find('.ReportAbuseButton-send-report')).toHaveLength(0);
expect(root.find('button.ReportAbuseButton-send-report')).toHaveLength(0);
});
it('dispatches when the send button is clicked if textarea has text', () => {
@ -179,11 +183,11 @@ describe(__filename, () => {
const root = renderMount({ addon, store });
// This simulates entering text into the textarea.
const textarea = root.find('.ReportAbuseButton-textarea textarea');
textarea.node.value = 'Opera did it first!';
const textarea = root.find('.ReportAbuseButton-textarea > textarea');
textarea.instance().value = 'Opera did it first!';
textarea.simulate('change');
root.find('.ReportAbuseButton-send-report').simulate('click', fakeEvent);
root.find('button.ReportAbuseButton-send-report').simulate('click', fakeEvent);
sinon.assert.calledWith(dispatchSpy, sendAddonAbuseReport({
addonSlug: addon.slug,
errorHandlerId: 'create-stub-error-handler-id',
@ -199,16 +203,16 @@ describe(__filename, () => {
const root = renderMount({ addon, store });
// Make sure it's disabled by default.
expect(root.find('.ReportAbuseButton-send-report').prop('disabled'))
expect(root.find('button.ReportAbuseButton-send-report').prop('disabled'))
.toEqual(true);
// This simulates entering text into the textarea.
const textarea = root.find('.ReportAbuseButton-textarea textarea');
textarea.node.value = 'Opera did it first!';
const textarea = root.find('.ReportAbuseButton-textarea > textarea');
textarea.instance().value = 'Opera did it first!';
textarea.simulate('change');
sinon.assert.calledWith(dispatchSpy, enableAbuseButtonUI({ addon }));
expect(root.find('.ReportAbuseButton-send-report').prop('disabled'))
expect(root.find('button.ReportAbuseButton-send-report').prop('disabled'))
.toEqual(false);
});
@ -219,8 +223,8 @@ describe(__filename, () => {
const root = renderMount({ addon, store });
// This simulates entering text into the textarea.
const textarea = root.find('.ReportAbuseButton-textarea textarea');
textarea.node.value = 'Opera did it first!';
const textarea = root.find('.ReportAbuseButton-textarea > textarea');
textarea.instance().value = 'Opera did it first!';
textarea.simulate('change');
sinon.assert.calledWith(dispatchSpy, enableAbuseButtonUI({ addon }));
@ -229,7 +233,7 @@ describe(__filename, () => {
dispatchSpy.reset();
// This simulates entering text into the textarea.
textarea.node.value = 'Opera did it first! Adding some text!';
textarea.instance().value = 'Opera did it first! Adding some text!';
textarea.simulate('change');
sinon.assert.neverCalledWith(dispatchSpy, enableAbuseButtonUI({ addon }));
@ -242,12 +246,12 @@ describe(__filename, () => {
const root = renderMount({ addon, store });
// This simulates entering text into the textarea.
const textarea = root.find('.ReportAbuseButton-textarea textarea');
textarea.node.value = ' ';
const textarea = root.find('.ReportAbuseButton-textarea > textarea');
textarea.instance().value = ' ';
textarea.simulate('change');
sinon.assert.neverCalledWith(dispatchSpy, enableAbuseButtonUI({ addon }));
expect(root.find('.ReportAbuseButton-send-report').prop('disabled'))
expect(root.find('button.ReportAbuseButton-send-report').prop('disabled'))
.toEqual(true);
});
@ -258,15 +262,15 @@ describe(__filename, () => {
const root = renderMount({ addon, store });
// This simulates entering text into the textarea.
const textarea = root.find('.ReportAbuseButton-textarea textarea');
textarea.node.value = 'Opera did it first!';
const textarea = root.find('.ReportAbuseButton-textarea > textarea');
textarea.instance().value = 'Opera did it first!';
textarea.simulate('change');
textarea.node.value = '';
textarea.instance().value = '';
textarea.simulate('change');
sinon.assert.calledWith(dispatchSpy, disableAbuseButtonUI({ addon }));
expect(root.find('.ReportAbuseButton-send-report').prop('disabled'))
expect(root.find('button.ReportAbuseButton-send-report').prop('disabled'))
.toEqual(true);
});
@ -277,15 +281,15 @@ describe(__filename, () => {
const root = renderMount({ addon, store });
// This simulates entering text into the textarea.
const textarea = root.find('.ReportAbuseButton-textarea textarea');
textarea.node.value = 'Opera did it first!';
const textarea = root.find('.ReportAbuseButton-textarea > textarea');
textarea.instance().value = 'Opera did it first!';
textarea.simulate('change');
textarea.node.value = ' ';
textarea.instance().value = ' ';
textarea.simulate('change');
sinon.assert.calledWith(dispatchSpy, disableAbuseButtonUI({ addon }));
expect(root.find('.ReportAbuseButton-send-report').prop('disabled'))
expect(root.find('button.ReportAbuseButton-send-report').prop('disabled'))
.toEqual(true);
});
@ -296,7 +300,6 @@ describe(__filename, () => {
const fakeEvent = createFakeEvent();
const { store } = dispatchClientMetadata();
const dispatchSpy = sinon.spy(store, 'dispatch');
const root = renderMount({ addon, store });
// We enable the button with an empty textarea; this never happens
// normally but we can force it here for testing.
@ -304,10 +307,13 @@ describe(__filename, () => {
dispatchSpy.reset();
fakeEvent.preventDefault.reset();
const root = renderMount({ addon, store });
// Make sure the button isn't disabled.
expect(root.find('.ReportAbuseButton-send-report').prop('disabled'))
expect(root.find('.ReportAbuseButton-send-report').first().prop('disabled'))
.toEqual(false);
root.find('.ReportAbuseButton-send-report').simulate('click', fakeEvent);
root.find('button.ReportAbuseButton-send-report')
.simulate('click', fakeEvent);
sinon.assert.notCalled(dispatchSpy);
// Make sure preventDefault was called; we then know the sendReport()

Просмотреть файл

@ -1,6 +1,6 @@
import { shallow } from 'enzyme';
import React from 'react';
import { renderIntoDocument } from 'react-addons-test-utils';
import { renderIntoDocument } from 'react-dom/test-utils';
import { PhotoSwipeGallery } from 'react-photoswipe';
import ScreenShots, {

Просмотреть файл

@ -121,7 +121,7 @@ describe(__filename, () => {
it('blurs the form on submit', () => {
const wrapper = mountComponent();
const blurSpy = sinon.spy(
wrapper.find(SearchFormBase).getNode().autosuggest.input, 'blur');
wrapper.find(SearchFormBase).instance().autosuggest.input, 'blur');
sinon.assert.notCalled(blurSpy);
wrapper.find('input').simulate('change', createFakeChangeEvent('something'));

Просмотреть файл

@ -72,7 +72,9 @@ describe(__filename, () => {
it('localises the user count', () => {
const root = render({ lang: 'fr' });
expect(root.find('.SearchResult-users-text')).toIncludeText('5 253');
// `\xa0` is a non-breaking space.
// See: https://github.com/airbnb/enzyme/issues/1349
expect(root.find('.SearchResult-users-text')).toIncludeText('5\xa0253');
});
it('renders the user count as singular', () => {

Просмотреть файл

@ -2,7 +2,7 @@ import React from 'react';
import {
renderIntoDocument as render,
findRenderedComponentWithType,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { Provider } from 'react-redux';
import createStore from 'amo/store';

Просмотреть файл

@ -2,7 +2,7 @@ import React from 'react';
import {
renderIntoDocument,
findRenderedComponentWithType,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { findDOMNode } from 'react-dom';
import { Provider } from 'react-redux';

Просмотреть файл

@ -3,7 +3,7 @@ import { findDOMNode } from 'react-dom';
import {
renderIntoDocument,
findRenderedComponentWithType,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import NestedStatus from 'react-nested-status';
import { Provider } from 'react-redux';
import Helmet from 'react-helmet';

Просмотреть файл

@ -62,7 +62,13 @@ const {
mapStateToProps,
withInstallHelpers,
} = installAddon;
const BaseComponent = () => <div />;
// See: https://github.com/airbnb/enzyme/issues/1232.
class BaseComponent extends React.Component {
render() {
return <div />;
}
}
function componentWithInstallHelpers({ src = 'some-src' } = {}) {
// This simulates how a component would typically apply
@ -90,13 +96,22 @@ const defaultProps = (overrides = {}) => {
};
};
function render(Component, props) {
return shallowUntilTarget(
<Component {...props} />,
BaseComponent,
// If we do not disable these methods, `componentDidMount()` will be called
// but in most cases we do not have a complete fakeAddonManager.
// See: http://airbnb.io/enzyme/docs/guides/migration-from-2-to-3.html#lifecycle-methods.
{ shallowOptions: { disableLifecycleMethods: true } }
);
}
function renderWithInstallHelpers({ src, ...customProps } = {}) {
const Component = componentWithInstallHelpers({ src });
const props = defaultProps(customProps);
const root = shallowUntilTarget(
<Component {...props} />, BaseComponent
);
const root = render(Component, props);
return { root, dispatch: props.store.dispatch };
}
@ -184,7 +199,8 @@ describe(__filename, () => {
_addonManager,
store: createStore().store,
};
const root = shallowUntilTarget(<Component {...props} />, BaseComponent);
const root = render(Component, props);
// Update the component with the same props (i.e. same add-on guid)
// and make sure the status is not set.
@ -898,7 +914,9 @@ describe(`${__filename}: withInstallHelpers`, () => {
it('does not dispatch a FATAL_ERROR when setEnabled is missing', () => {
const fakeAddonManager = {
enable: sinon.stub().returns(Promise.reject(new Error(SET_ENABLE_NOT_AVAILABLE))),
enable: sinon.stub().returns(Promise.reject(
new Error(SET_ENABLE_NOT_AVAILABLE)
)),
};
const { root, dispatch } = renderWithInstallHelpers({
_addonManager: fakeAddonManager,

Просмотреть файл

@ -1,7 +1,7 @@
import React from 'react';
import {
Simulate, findRenderedComponentWithType, renderIntoDocument,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { findDOMNode } from 'react-dom';
import { Provider } from 'react-redux';

Просмотреть файл

@ -2,7 +2,7 @@ import React from 'react';
import {
renderIntoDocument,
findRenderedComponentWithType,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { findDOMNode } from 'react-dom';
import { Provider } from 'react-redux';

Просмотреть файл

@ -3,7 +3,7 @@ import {
findRenderedComponentWithType,
renderIntoDocument,
Simulate,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import {
findDOMNode,
} from 'react-dom';

Просмотреть файл

@ -119,7 +119,7 @@ describe(__filename, () => {
const button = root.childAt(1);
expect(button.type()).toEqual(Button);
expect(button.children()).toContain('Install Theme');
expect(button.children().at(1)).toHaveText('Install Theme');
expect(button).toHaveProp(
'data-browsertheme', JSON.stringify(themePreview.getThemeData(addon))
);
@ -133,7 +133,7 @@ describe(__filename, () => {
const root = renderToDom({ addon, installTheme, status: UNKNOWN });
const preventDefault = sinon.spy();
const button = root.find('.InstallButton-button');
const button = root.find('button.InstallButton-button');
button.simulate('click', createFakeEvent({ preventDefault }));
sinon.assert.called(preventDefault);
@ -159,7 +159,7 @@ describe(__filename, () => {
expect(button.type()).toEqual(Button);
expect(button.children()).toContain('Add to Firefox');
expect(button.children().at(1)).toHaveText('Add to Firefox');
expect(button).toHaveClassName('InstallButton-button');
expect(button).not.toHaveClassName('Button--small');
expect(button).toHaveProp('href', installURL);
@ -261,7 +261,7 @@ describe(__filename, () => {
expect(button.type()).toEqual(Button);
expect(button).toHaveClassName('Button--action');
expect(button).toHaveClassName('InstallButton-button');
expect(button.children()).toContain('Add to Firefox');
expect(button.children().at(1)).toHaveText('Add to Firefox');
});
it('renders a button for OpenSearch regardless of mozAddonManager', () => {
@ -280,7 +280,7 @@ describe(__filename, () => {
expect(button.type()).toEqual(Button);
expect(button).toHaveClassName('Button--action');
expect(button).toHaveClassName('InstallButton-button');
expect(button.children()).toContain('Add to Firefox');
expect(button.children().at(1)).toHaveText('Add to Firefox');
});
it('disables the OpenSearch button if not compatible', () => {
@ -297,7 +297,7 @@ describe(__filename, () => {
expect(button.type()).toEqual(Button);
expect(button).toHaveClassName('InstallButton-button--disabled');
expect(button.children()).toContain('Add to Firefox');
expect(button.children().at(1)).toHaveText('Add to Firefox');
});
it('disables install switch and uses button for OpenSearch plugins', () => {
@ -315,7 +315,8 @@ describe(__filename, () => {
});
const installButton = rootNode.find('.InstallButton-button');
expect(installButton.children()).toContain('Add to Firefox');
expect(installButton.children().at(1))
.toHaveText('Add to Firefox');
installButton.simulate('click', createFakeEvent());
sinon.assert.calledWith(fakeLog.info, 'Adding OpenSearch Provider');

Просмотреть файл

@ -1,5 +1,5 @@
import React from 'react';
import { Simulate, renderIntoDocument } from 'react-addons-test-utils';
import { Simulate, renderIntoDocument } from 'react-dom/test-utils';
import { findDOMNode } from 'react-dom';
import {

Просмотреть файл

@ -1,5 +1,5 @@
import React from 'react';
import { renderIntoDocument } from 'react-addons-test-utils';
import { renderIntoDocument } from 'react-dom/test-utils';
import { findDOMNode } from 'react-dom';
import LoginPage from 'core/components/LoginPage';

Просмотреть файл

@ -6,7 +6,7 @@ import {
renderIntoDocument,
findRenderedComponentWithType,
scryRenderedComponentsWithType,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { Route, Router, createMemoryHistory } from 'react-router';
import Paginate from 'core/components/Paginate';

Просмотреть файл

@ -1,6 +1,6 @@
import React from 'react';
import { findDOMNode } from 'react-dom';
import { renderIntoDocument } from 'react-addons-test-utils';
import { renderIntoDocument } from 'react-dom/test-utils';
import PaginatorLink from 'core/components/PaginatorLink';

Просмотреть файл

@ -1,7 +1,7 @@
/* global document */
import { shallow } from 'enzyme';
import React from 'react';
import { Simulate, renderIntoDocument } from 'react-addons-test-utils';
import { Simulate, renderIntoDocument } from 'react-dom/test-utils';
import ReactDOM, { findDOMNode } from 'react-dom';
import {

Просмотреть файл

@ -4,7 +4,7 @@ import { findDOMNode } from 'react-dom';
import {
findRenderedDOMComponentWithTag,
renderIntoDocument,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import ServerHtml from 'core/containers/ServerHtml';
import FakeApp, {

Просмотреть файл

@ -1,5 +1,5 @@
import React from 'react';
import { renderIntoDocument } from 'react-addons-test-utils';
import { renderIntoDocument } from 'react-dom/test-utils';
import { SimulateAsyncErrorBase } from
'core/containers/error-simulation/SimulateAsyncError';

Просмотреть файл

@ -3,7 +3,7 @@ import { findDOMNode } from 'react-dom';
import {
Simulate,
renderIntoDocument,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { SimulateClientErrorBase } from
'core/containers/error-simulation/SimulateClientError';

Просмотреть файл

@ -1,5 +1,5 @@
import React from 'react';
import { renderIntoDocument } from 'react-addons-test-utils';
import { renderIntoDocument } from 'react-dom/test-utils';
import { SimulateSyncErrorBase } from
'core/containers/error-simulation/SimulateSyncError';

Просмотреть файл

@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import {
renderIntoDocument,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import I18nProvider from 'core/i18n/Provider';
import { fakeI18n } from 'tests/unit/helpers';

Просмотреть файл

@ -4,7 +4,7 @@ import PropTypes from 'prop-types';
import {
renderIntoDocument,
findRenderedComponentWithType,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import I18nProvider from 'core/i18n/Provider';
import translate from 'core/i18n/translate';

Просмотреть файл

@ -48,10 +48,14 @@ const stubRoutes = (
export class ServerTestHelper {
constructor() {
this.helmetCanUseDOM = Helmet.canUseDOM;
this.nestedStatusCanUseDOM = NestedStatus.canUseDOM;
}
beforeEach() {
Helmet.canUseDOM = false;
// See: https://github.com/gaearon/react-side-effect/releases/tag/v1.0.0
// (`react-side-effect` is a dependency of `react-nested-status`).
NestedStatus.canUseDOM = false;
global.webpackIsomorphicTools = {
assets: () => fakeAssets,
};
@ -59,6 +63,7 @@ export class ServerTestHelper {
afterEach() {
Helmet.canUseDOM = this.helmetCanUseDOM;
NestedStatus.canUseDOM = this.nestedStatusCanUseDOM;
delete global.webpackIsomorphicTools;
}

Просмотреть файл

@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { findDOMNode } from 'react-dom';
import { findRenderedComponentWithType, renderIntoDocument }
from 'react-addons-test-utils';
from 'react-dom/test-utils';
import { createStore, combineReducers } from 'redux';
import { shallow } from 'enzyme';

Просмотреть файл

@ -6,7 +6,7 @@ import { sprintf } from 'jed';
import {
renderIntoDocument,
findRenderedComponentWithType,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { compose } from 'redux';
import * as api from 'core/api';

Просмотреть файл

@ -4,7 +4,7 @@ import { findDOMNode } from 'react-dom';
import {
findRenderedComponentWithType,
renderIntoDocument,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import NestedStatus from 'react-nested-status';
import { Provider } from 'react-redux';

Просмотреть файл

@ -293,7 +293,7 @@ export function shallowUntilTarget(componentInstance, TargetComponent, {
return root.shallow(shallowOptions);
}
// Unwrap the next component in the hierarchy.
root = root.first().shallow(shallowOptions);
root = root.dive();
}
throw new Error(oneLine`Could not find ${TargetComponent} in rendered

Просмотреть файл

@ -1,5 +1,5 @@
import React from 'react';
import { renderIntoDocument } from 'react-addons-test-utils';
import { renderIntoDocument } from 'react-dom/test-utils';
import Card from 'ui/components/Card';

Просмотреть файл

@ -1,6 +1,6 @@
import React from 'react';
import { findDOMNode } from 'react-dom';
import { renderIntoDocument } from 'react-addons-test-utils';
import { renderIntoDocument } from 'react-dom/test-utils';
import CardList from 'ui/components/CardList';

Просмотреть файл

@ -90,7 +90,7 @@ describe(__filename, () => {
const root = mountRender();
// This checks that textarea.focus() was called.
expect(
root.find('.DismissibleTextForm-textarea')
root.find('textarea.DismissibleTextForm-textarea')
.matchesElement(document.activeElement)
).toEqual(true);
});
@ -143,7 +143,7 @@ describe(__filename, () => {
});
expect(root.find('.DismissibleTextForm-submit').childAt(0))
.toContain('Submit the form');
.toHaveText('Submit the form');
});
it('lets you configure the in-progress submit button text', () => {
@ -153,7 +153,7 @@ describe(__filename, () => {
});
expect(root.find('.DismissibleTextForm-submit').childAt(0))
.toContain('Submitting the form');
.toHaveText('Submitting the form');
});
it('disables the submit button while submitting the form', () => {

Просмотреть файл

@ -9,7 +9,12 @@ import { createFakeEvent, shallowUntilTarget } from 'tests/unit/helpers';
describe(__filename, () => {
const renderComponent = (componentInstance) => {
return shallowUntilTarget(componentInstance, DropdownMenuBase);
return shallowUntilTarget(componentInstance, DropdownMenuBase, {
// TODO: ideally, we would like to enable the lifecycle methods, but it
// produces unexpected errors, related to Enzyme 3.
// See: http://airbnb.io/enzyme/docs/guides/migration-from-2-to-3.html#lifecycle-methods.
shallowOptions: { disableLifecycleMethods: true },
});
};
it('renders a menu', () => {
@ -47,18 +52,24 @@ describe(__filename, () => {
it('resets the menu state on blur', () => {
const root = mount(<DropdownMenu text="Menu" />);
const menu = root.find('.DropdownMenu');
// When using `mount`, Enzyme 3+ requires to `.find()` the elements all the
// time, in case something has changed.
const getMenu = () => root.find('.DropdownMenu');
// User clicks the menu main button.
menu.find('.DropdownMenu-button').simulate('click', createFakeEvent());
expect(menu).toHaveClassName('DropdownMenu--active');
getMenu().find('.DropdownMenu-button').simulate('click', createFakeEvent());
expect(getMenu()).toHaveClassName('DropdownMenu--active');
// User clicks somewhere else.
// The first `instance()` call is Enzyme API, the second `getInstance()`
// call is react-onclickoutside API. See:
// https://github.com/Pomax/react-onclickoutside#but-how-can-i-access-my-component-it-has-an-api-that-i-rely-on
root.instance().getInstance().handleClickOutside();
expect(menu).not.toHaveClassName('DropdownMenu--active');
// When using `mount`, Enzyme 3+ requires to `.update()` when we manually
// make changes, like above.
root.update();
expect(getMenu()).not.toHaveClassName('DropdownMenu--active');
});
it('resets the menu state on click', () => {
@ -70,57 +81,57 @@ describe(__filename, () => {
</DropdownMenuItem>
</DropdownMenu>
);
const menu = root.find('.DropdownMenu');
const getMenu = () => root.find('.DropdownMenu');
// User clicks the menu main button to open it.
menu.find('.DropdownMenu-button').simulate('click', createFakeEvent());
expect(menu).toHaveClassName('DropdownMenu--active');
getMenu().find('.DropdownMenu-button').simulate('click', createFakeEvent());
expect(getMenu()).toHaveClassName('DropdownMenu--active');
// User clicks a link.
menu.find('.TestLink').simulate('click', createFakeEvent());
expect(menu).not.toHaveClassName('DropdownMenu--active');
getMenu().find('.TestLink').simulate('click', createFakeEvent());
expect(getMenu()).not.toHaveClassName('DropdownMenu--active');
});
it('sets active on mouseEnter/clears on mouseLeave', () => {
// We do this instead of a :hover with CSS to allow clearing the active
// state after a click.
const root = mount(<DropdownMenu text="Menu" />);
const menu = root.find('.DropdownMenu');
const getMenu = () => root.find('.DropdownMenu');
// User hovers on the menu.
menu.simulate('mouseEnter', createFakeEvent());
expect(menu).toHaveClassName('DropdownMenu--active');
getMenu().simulate('mouseEnter', createFakeEvent());
expect(getMenu()).toHaveClassName('DropdownMenu--active');
// User's mouse leaves the menu.
menu.simulate('mouseLeave', createFakeEvent());
expect(menu).not.toHaveClassName('DropdownMenu--active');
getMenu().simulate('mouseLeave', createFakeEvent());
expect(getMenu()).not.toHaveClassName('DropdownMenu--active');
});
it('allows the user to hover then click without dismissing the menu', () => {
const root = mount(<DropdownMenu text="Menu" />);
const menu = root.find('.DropdownMenu');
const getMenu = () => root.find('.DropdownMenu');
// User hovers on the menu.
menu.simulate('mouseEnter', createFakeEvent());
expect(menu).toHaveClassName('DropdownMenu--active');
getMenu().simulate('mouseEnter', createFakeEvent());
expect(getMenu()).toHaveClassName('DropdownMenu--active');
// User clicks the menu's main button once, which should not hide it.
menu.find('.DropdownMenu-button').simulate('click', createFakeEvent());
expect(menu).toHaveClassName('DropdownMenu--active');
getMenu().find('.DropdownMenu-button').simulate('click', createFakeEvent());
expect(getMenu()).toHaveClassName('DropdownMenu--active');
});
it('allows the user to hover, then dismiss the menu with a click', () => {
const root = mount(<DropdownMenu text="Menu" />);
const menu = root.find('.DropdownMenu');
const getMenu = () => root.find('.DropdownMenu');
// User hovers on the menu.
menu.simulate('mouseEnter', createFakeEvent());
expect(menu).toHaveClassName('DropdownMenu--active');
getMenu().simulate('mouseEnter', createFakeEvent());
expect(getMenu()).toHaveClassName('DropdownMenu--active');
// User clicks the menu's main button twice, which will dismiss it.
menu.find('.DropdownMenu-button').simulate('click', createFakeEvent());
menu.find('.DropdownMenu-button').simulate('click', createFakeEvent());
expect(menu).not.toHaveClassName('DropdownMenu--active');
getMenu().find('.DropdownMenu-button').simulate('click', createFakeEvent());
getMenu().find('.DropdownMenu-button').simulate('click', createFakeEvent());
expect(getMenu()).not.toHaveClassName('DropdownMenu--active');
});
it('optionally takes a class name', () => {

Просмотреть файл

@ -1,6 +1,6 @@
import React from 'react';
import { findDOMNode } from 'react-dom';
import { renderIntoDocument, Simulate } from 'react-addons-test-utils';
import { renderIntoDocument, Simulate } from 'react-dom/test-utils';
import { API_ERROR_SIGNATURE_EXPIRED } from 'core/constants';
import I18nProvider from 'core/i18n/Provider';

Просмотреть файл

@ -36,21 +36,21 @@ describe(__filename, () => {
// We have to mount for this test because of the usage of `setState`
// in this component.
const root = mount(<ExpandableCard i18n={fakeI18n()} />);
const card = root.find('.ExpandableCard');
const card = () => root.find('.ExpandableCard');
const fakeEvent = createFakeEvent();
// Clicking on the toggle should expand the card.
root.find('.ExpandableCard-ToggleLink').simulate('click', fakeEvent);
sinon.assert.called(fakeEvent.preventDefault);
expect(card).toHaveClassName('ExpandableCard--expanded');
expect(card()).toHaveClassName('ExpandableCard--expanded');
// Clicking on the toggle again should set the card to be unexpanded.
fakeEvent.preventDefault.reset();
root.find('.ExpandableCard-ToggleLink').simulate('click', fakeEvent);
sinon.assert.called(fakeEvent.preventDefault);
expect(card).not.toHaveClassName('ExpandableCard--expanded');
expect(card()).not.toHaveClassName('ExpandableCard--expanded');
});
it('renders className', () => {

Просмотреть файл

@ -33,8 +33,8 @@ describe(__filename, () => {
sinon.assert.calledWith(dispatchSpy,
setHeroBannerOrder({ name, random: true, sections }));
expect(root.find('.Hero')).toHaveLength(1);
expect(root.find('.Hero-name-TestingPage')).toHaveLength(1);
expect(root.find('.Card.Hero')).toHaveLength(1);
expect(root.find('.Card.Hero-name-TestingPage')).toHaveLength(1);
expect(root.find('.something')).toHaveLength(1);
expect(root.find('.something-else')).toHaveLength(1);
});

Просмотреть файл

@ -1,5 +1,5 @@
import React from 'react';
import { renderIntoDocument, Simulate } from 'react-addons-test-utils';
import { renderIntoDocument, Simulate } from 'react-dom/test-utils';
import Overlay from 'ui/components/Overlay';

Просмотреть файл

@ -1,7 +1,7 @@
import React from 'react';
import {
findRenderedComponentWithType, renderIntoDocument,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { findDOMNode } from 'react-dom';
import Overlay from 'ui/components/Overlay';

Просмотреть файл

@ -3,7 +3,7 @@ import {
findRenderedComponentWithType,
renderIntoDocument,
Simulate,
} from 'react-addons-test-utils';
} from 'react-dom/test-utils';
import { findDOMNode } from 'react-dom';
import { fakeI18n } from 'tests/unit/helpers';

Просмотреть файл

@ -1,7 +1,7 @@
import React from 'react';
import { mount } from 'enzyme';
import { findDOMNode } from 'react-dom';
import { Simulate, renderIntoDocument } from 'react-addons-test-utils';
import { Simulate, renderIntoDocument } from 'react-dom/test-utils';
import { ShowMoreCardBase, MAX_HEIGHT } from 'ui/components/ShowMoreCard';
import { fakeI18n } from 'tests/unit/helpers';

Просмотреть файл

@ -1,5 +1,5 @@
import React from 'react';
import { Simulate, renderIntoDocument } from 'react-addons-test-utils';
import { Simulate, renderIntoDocument } from 'react-dom/test-utils';
import { findDOMNode } from 'react-dom';
import Switch from 'ui/components/Switch';

Просмотреть файл

@ -76,9 +76,9 @@ export default Object.assign({}, webpackConfig, {
// [Invariant](https://github.com/zertosh/invariant) which
// hides error messages in the production build.
new webpack.NormalModuleReplacementPlugin(
/^react$/, 'react/dist/react.js'),
/^react$/, 'react/umd/react.development.js'),
new webpack.NormalModuleReplacementPlugin(
/^react-dom$/, 'react-dom/dist/react-dom.js'),
/^react-dom$/, 'react-dom/umd/react-dom.development.js'),
new webpack.NormalModuleReplacementPlugin(
/^redux$/, 'redux/dist/redux.js'),
new webpack.HotModuleReplacementPlugin(),

361
yarn.lock
Просмотреть файл

@ -6,10 +6,6 @@
version "6.0.79"
resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.79.tgz#5efe7d4a6d8c453c7e9eaf55d931f4a22fac5169"
"@types/react@^15.0.22":
version "15.0.34"
resolved "https://registry.yarnpkg.com/@types/react/-/react-15.0.34.tgz#c4f7235f3d245216a706887b7d1ffedaf5b1dc06"
JSONStream@^0.8.4:
version "0.8.4"
resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.8.4.tgz#91657dfe6ff857483066132b4618b62e8f4887bd"
@ -1604,27 +1600,6 @@ chalk@~0.4.0:
has-color "~0.1.0"
strip-ansi "~0.1.0"
cheerio@^0.22.0:
version "0.22.0"
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e"
dependencies:
css-select "~1.2.0"
dom-serializer "~0.1.0"
entities "~1.1.1"
htmlparser2 "^3.9.1"
lodash.assignin "^4.0.9"
lodash.bind "^4.1.4"
lodash.defaults "^4.0.1"
lodash.filter "^4.4.0"
lodash.flatten "^4.2.0"
lodash.foreach "^4.3.0"
lodash.map "^4.4.0"
lodash.merge "^4.4.0"
lodash.pick "^4.2.1"
lodash.reduce "^4.4.0"
lodash.reject "^4.4.0"
lodash.some "^4.4.0"
cheerio@^1.0.0-rc.2:
version "1.0.0-rc.2"
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db"
@ -1829,6 +1804,10 @@ colormin@^1.0.5:
css-color-names "0.0.4"
has "^1.0.1"
colors@0.5.x:
version "0.5.1"
resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774"
colors@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
@ -2051,7 +2030,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
create-react-class@15.x:
create-react-class@15.x, create-react-class@^15.5.1:
version "15.6.2"
resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a"
dependencies:
@ -2059,14 +2038,6 @@ create-react-class@15.x:
loose-envify "^1.3.1"
object-assign "^4.1.1"
create-react-class@^15.6.0:
version "15.6.0"
resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4"
dependencies:
fbjs "^0.8.9"
loose-envify "^1.3.1"
object-assign "^4.1.1"
cross-spawn@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
@ -2347,7 +2318,7 @@ deep-equal-ident@^1.1.1:
dependencies:
lodash.isequal "^3.0"
deep-equal@^1.0.0, deep-equal@^1.0.1:
deep-equal@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
@ -2460,6 +2431,10 @@ diffie-hellman@^5.0.0:
miller-rabin "^4.0.0"
randombytes "^2.0.0"
discontinuous-range@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a"
dns-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
@ -2665,38 +2640,52 @@ entities@^1.1.1, entities@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
enzyme-matchers@^3.8.3:
version "3.8.3"
resolved "https://registry.yarnpkg.com/enzyme-matchers/-/enzyme-matchers-3.8.3.tgz#6269d47b0d81d5222745da503f27ac003ba208d2"
enzyme-adapter-react-16@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.0.tgz#86c5db7c10f0be6ec25d54ca41b59f2abb397cf4"
dependencies:
enzyme-adapter-utils "^1.1.0"
lodash "^4.17.4"
object.assign "^4.0.4"
object.values "^1.0.4"
prop-types "^15.5.10"
react-test-renderer "^16.0.0-0"
enzyme-adapter-utils@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.1.1.tgz#689de8853f0751710590d6dfa730ff4056ea36b2"
dependencies:
lodash "^4.17.4"
object.assign "^4.0.4"
prop-types "^15.5.10"
enzyme-matchers@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/enzyme-matchers/-/enzyme-matchers-4.0.1.tgz#f3fb5e5e5e5ec9a19144d172605433fc7e9d9f5a"
dependencies:
deep-equal-ident "^1.1.1"
enzyme-to-json@^1.5.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-1.5.1.tgz#e34f4d126bb3f4696ce3800b51f9ed83df708799"
enzyme-to-json@^3.0.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.2.2.tgz#110047c68dda97aaeb7af3cee7d995fe3d17e82a"
dependencies:
lodash.filter "^4.6.0"
lodash.isnil "^4.0.0"
lodash.isplainobject "^4.0.6"
lodash.omitby "^4.5.0"
lodash.range "^3.2.0"
object-values "^1.0.0"
object.entries "^1.0.3"
lodash "^4.17.4"
enzyme@^2.8.2:
version "2.9.1"
resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.9.1.tgz#07d5ce691241240fb817bf2c4b18d6e530240df6"
enzyme@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.2.0.tgz#998bdcda0fc71b8764a0017f7cc692c943f54a7a"
dependencies:
cheerio "^0.22.0"
function.prototype.name "^1.0.0"
cheerio "^1.0.0-rc.2"
function.prototype.name "^1.0.3"
has "^1.0.1"
is-subset "^0.1.1"
lodash "^4.17.4"
object-is "^1.0.1"
object.assign "^4.0.4"
object.entries "^1.0.4"
object.values "^1.0.4"
prop-types "^15.5.10"
uuid "^3.0.1"
raf "^3.4.0"
rst-selector-parser "^2.2.3"
errno@^0.1.3, errno@^0.1.4:
version "0.1.4"
@ -3288,14 +3277,6 @@ fb-watchman@^2.0.0:
dependencies:
bser "^2.0.0"
fbjs@0.1.0-alpha.10:
version "0.1.0-alpha.10"
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.1.0-alpha.10.tgz#46e457c09cbefb51fc752a3e030e7b67fcc384c8"
dependencies:
core-js "^1.0.0"
promise "^7.0.3"
whatwg-fetch "^0.9.0"
fbjs@^0.8.16:
version "0.8.16"
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
@ -3578,13 +3559,13 @@ function-bind@^1.0.2, function-bind@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
function.prototype.name@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.0.tgz#5f523ca64e491a5f95aba80cc1e391080a14482e"
function.prototype.name@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.3.tgz#0099ae5572e9dd6f03c97d023fd92bcc5e639eac"
dependencies:
define-properties "^1.1.2"
function-bind "^1.1.0"
is-callable "^1.1.2"
is-callable "^1.1.3"
functional-red-black-tree@^1.0.1:
version "1.0.1"
@ -3889,14 +3870,14 @@ hide-powered-by@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.0.0.tgz#4a85ad65881f62857fc70af7174a1184dccce32b"
history@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/history/-/history-2.1.2.tgz#4aa2de897a0e4867e4539843be6ecdb2986bfdec"
history@^3.0.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/history/-/history-3.3.0.tgz#fcedcce8f12975371545d735461033579a6dae9c"
dependencies:
deep-equal "^1.0.0"
invariant "^2.0.0"
query-string "^3.0.0"
warning "^2.0.0"
invariant "^2.2.1"
loose-envify "^1.2.0"
query-string "^4.2.2"
warning "^3.0.0"
hmac-drbg@^1.0.0:
version "1.0.1"
@ -4256,7 +4237,7 @@ is-builtin-module@^1.0.0:
dependencies:
builtin-modules "^1.0.0"
is-callable@^1.1.1, is-callable@^1.1.2, is-callable@^1.1.3:
is-callable@^1.1.1, is-callable@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
@ -4612,13 +4593,12 @@ jest-environment-node@^21.0.2:
jest-mock "^21.0.2"
jest-util "^21.0.2"
jest-enzyme@^3.8.3:
version "3.8.3"
resolved "https://registry.yarnpkg.com/jest-enzyme/-/jest-enzyme-3.8.3.tgz#5112fcc77d12cb75c3e26c09733f1831f5e45bb7"
jest-enzyme@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/jest-enzyme/-/jest-enzyme-4.0.1.tgz#9d13de2d194e09e12b71c9689afb2c066df30b0e"
dependencies:
"@types/react" "^15.0.22"
enzyme-matchers "^3.8.3"
enzyme-to-json "^1.5.0"
enzyme-matchers "^4.0.1"
enzyme-to-json "^3.0.0"
jest-get-type@^21.0.2:
version "21.0.2"
@ -5100,14 +5080,6 @@ lodash.assign@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
lodash.assignin@^4.0.9:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2"
lodash.bind@^4.1.4:
version "4.2.1"
resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35"
lodash.camelcase@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
@ -5124,25 +5096,13 @@ lodash.debounce@4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
lodash.defaults@^4.0.1:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
lodash.filter@^4.4.0, lodash.filter@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace"
lodash.find@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1"
lodash.flatten@^4.2.0:
lodash.flattendeep@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
lodash.foreach@^4.3.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
lodash.get@^4.4.2:
version "4.4.2"
@ -5163,14 +5123,6 @@ lodash.isequal@^3.0:
lodash._baseisequal "^3.0.0"
lodash._bindcallback "^3.0.0"
lodash.isnil@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz#49e28cd559013458c814c5479d3c663a21bfaa6c"
lodash.isplainobject@^4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
lodash.istypedarray@^3.0.0:
version "3.0.6"
resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62"
@ -5183,46 +5135,22 @@ lodash.keys@^3.0.0, lodash.keys@^3.1.2:
lodash.isarguments "^3.0.0"
lodash.isarray "^3.0.0"
lodash.map@^4.4.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
lodash.merge@^4.4.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5"
lodash.mergewith@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55"
lodash.omitby@^4.5.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.omitby/-/lodash.omitby-4.6.0.tgz#5c15ff4754ad555016b53c041311e8f079204791"
lodash.pick@^4.2.1:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
lodash.range@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/lodash.range/-/lodash.range-3.2.0.tgz#f461e588f66683f7eadeade513e38a69a565a15d"
lodash.reduce@4.6.0, lodash.reduce@^4.4.0:
lodash.reduce@4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b"
lodash.reject@^4.4.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415"
lodash.some@^4.4.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d"
lodash.sortby@^4.7.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
@ -5581,6 +5509,14 @@ ncp@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"
nearley@^2.7.10:
version "2.11.0"
resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.0.tgz#5e626c79a6cd2f6ab9e7e5d5805e7668967757ae"
dependencies:
nomnom "~1.6.2"
railroad-diagrams "^1.0.0"
randexp "^0.4.2"
negotiator@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
@ -5730,6 +5666,13 @@ nomnom@1.8.1:
chalk "~0.4.0"
underscore "~1.6.0"
nomnom@~1.6.2:
version "1.6.2"
resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971"
dependencies:
colors "0.5.x"
underscore "~1.4.4"
"nopt@2 || 3":
version "3.0.6"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
@ -5856,10 +5799,6 @@ object-keys@^1.0.10, object-keys@^1.0.6, object-keys@^1.0.8:
version "1.0.11"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
object-values@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/object-values/-/object-values-1.0.0.tgz#72af839630119e5b98c3b02bb8c27e3237158105"
object.assign@^4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc"
@ -5868,7 +5807,7 @@ object.assign@^4.0.4:
function-bind "^1.1.0"
object-keys "^1.0.10"
object.entries@^1.0.3, object.entries@^1.0.4:
object.entries@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f"
dependencies:
@ -6652,7 +6591,7 @@ progress@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
promise@^7.0.3, promise@^7.1.1:
promise@^7.1.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
dependencies:
@ -6665,7 +6604,7 @@ promisify-node@^0.4.0:
nodegit-promise "~4.0.0"
object-assign "^4.0.1"
prop-types@15.6.0, prop-types@15.x, prop-types@^15.6.0:
prop-types@15.6.0, prop-types@15.x, prop-types@^15.5.6, prop-types@^15.6.0:
version "15.6.0"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
dependencies:
@ -6673,7 +6612,7 @@ prop-types@15.6.0, prop-types@15.x, prop-types@^15.6.0:
loose-envify "^1.3.1"
object-assign "^4.1.1"
prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8:
prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8:
version "15.5.10"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154"
dependencies:
@ -6744,13 +6683,7 @@ qs@^6.1.0:
version "6.5.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49"
query-string@^3.0.0:
version "3.0.3"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-3.0.3.tgz#ae2e14b4d05071d4e9b9eb4873c35b0dcd42e638"
dependencies:
strict-uri-encode "^1.0.0"
query-string@^4.1.0:
query-string@^4.1.0, query-string@^4.2.2:
version "4.3.4"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
dependencies:
@ -6773,6 +6706,23 @@ querystringify@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb"
raf@3.4.0, raf@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575"
dependencies:
performance-now "^2.1.0"
railroad-diagrams@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e"
randexp@^0.4.2:
version "0.4.6"
resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3"
dependencies:
discontinuous-range "1.0.0"
ret "~0.1.10"
randomatic@^1.1.3:
version "1.1.7"
resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
@ -6879,16 +6829,6 @@ rc@^1.1.2, rc@^1.1.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
react-addons-css-transition-group@15.6.2:
version "15.6.2"
resolved "https://registry.yarnpkg.com/react-addons-css-transition-group/-/react-addons-css-transition-group-15.6.2.tgz#9e4376bcf40b5217d14ec68553081cee4b08a6d6"
dependencies:
react-transition-group "^1.2.0"
react-addons-test-utils@^15.5.1:
version "15.6.0"
resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.6.0.tgz#062d36117fe8d18f3ba5e06eb33383b0b85ea5b9"
react-autosuggest@9.3.2:
version "9.3.2"
resolved "https://registry.yarnpkg.com/react-autosuggest/-/react-autosuggest-9.3.2.tgz#dd8c0fbe9c25aa94afe296180353647f6ecc10a7"
@ -6921,14 +6861,14 @@ react-deep-force-update@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.1.1.tgz#8ea4263cd6455a050b37445b3f08fd839d86e909"
react-dom@15.6.2:
version "15.6.2"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730"
react-dom@16.1.1:
version "16.1.1"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.1.1.tgz#b2e331b6d752faf1a2d31399969399a41d8d45f8"
dependencies:
fbjs "^0.8.9"
fbjs "^0.8.16"
loose-envify "^1.1.0"
object-assign "^4.1.0"
prop-types "^15.5.10"
object-assign "^4.1.1"
prop-types "^15.6.0"
react-helmet@5.2.0:
version "5.2.0"
@ -6949,11 +6889,11 @@ react-hot-loader@^3.1.1:
redbox-react "^1.3.6"
source-map "^0.6.1"
react-nested-status@0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/react-nested-status/-/react-nested-status-0.1.2.tgz#41bceca75a2897632df6f2fc60b9b2de97b461ad"
react-nested-status@0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/react-nested-status/-/react-nested-status-0.2.1.tgz#0ba94b76c41cf8cba14d76b345a0f0165f1da366"
dependencies:
react-side-effect "~0.3.0"
react-side-effect "^1.1.0"
react-onclickoutside@6.7.0:
version "6.7.0"
@ -7004,14 +6944,16 @@ react-router-scroll@0.4.4:
scroll-behavior "^0.9.5"
warning "^3.0.0"
react-router@2.8.1:
version "2.8.1"
resolved "https://registry.yarnpkg.com/react-router/-/react-router-2.8.1.tgz#73e9491f6ceb316d0f779829081863e378ee4ed7"
react-router@3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.2.0.tgz#62b6279d589b70b34e265113e4c0a9261a02ed36"
dependencies:
history "^2.1.2"
create-react-class "^15.5.1"
history "^3.0.0"
hoist-non-react-statics "^1.2.0"
invariant "^2.2.1"
loose-envify "^1.2.0"
prop-types "^15.5.6"
warning "^3.0.0"
react-side-effect@^1.1.0:
@ -7021,24 +6963,19 @@ react-side-effect@^1.1.0:
exenv "^1.2.1"
shallowequal "^1.0.1"
react-side-effect@~0.3.0:
version "0.3.2"
resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-0.3.2.tgz#0daff9af35a3ec98db2036dc1683d63fbe147710"
dependencies:
fbjs "0.1.0-alpha.10"
react-super-responsive-table@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/react-super-responsive-table/-/react-super-responsive-table-0.3.0.tgz#7d025781d2b9deb16d3b300363ccf6a6ffc2d124"
dependencies:
classnames "^2.1.2"
react-test-renderer@^15.5.4:
version "15.6.1"
resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-15.6.1.tgz#026f4a5bb5552661fd2cc4bbcd0d4bc8a35ebf7e"
react-test-renderer@^16.0.0-0, react-test-renderer@^16.1.1:
version "16.1.1"
resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.1.1.tgz#a05184688d564be799f212449262525d1e350537"
dependencies:
fbjs "^0.8.9"
object-assign "^4.1.0"
fbjs "^0.8.16"
object-assign "^4.1.1"
prop-types "^15.6.0"
react-textarea-autosize@5.2.1:
version "5.2.1"
@ -7059,9 +6996,9 @@ react-transform-hmr@^1.0.4:
global "^4.3.0"
react-proxy "^1.1.7"
react-transition-group@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.0.tgz#b51fc921b0c3835a7ef7c571c79fc82c73e9204f"
react-transition-group@1.x:
version "1.2.1"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6"
dependencies:
chain-function "^1.0.0"
dom-helpers "^3.2.0"
@ -7069,15 +7006,14 @@ react-transition-group@^1.2.0:
prop-types "^15.5.6"
warning "^3.0.0"
react@15.6.2:
version "15.6.2"
resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72"
react@16.1.1:
version "16.1.1"
resolved "https://registry.yarnpkg.com/react/-/react-16.1.1.tgz#d5c4ef795507e3012282dd51261ff9c0e824fe1f"
dependencies:
create-react-class "^15.6.0"
fbjs "^0.8.9"
fbjs "^0.8.16"
loose-envify "^1.1.0"
object-assign "^4.1.0"
prop-types "^15.5.10"
object-assign "^4.1.1"
prop-types "^15.6.0"
read-file-stdin@^0.2.1:
version "0.2.1"
@ -7206,9 +7142,9 @@ redux-devtools-instrument@^1.0.1:
lodash "^4.2.0"
symbol-observable "^1.0.2"
redux-devtools@^3.3.2:
version "3.4.0"
resolved "https://registry.yarnpkg.com/redux-devtools/-/redux-devtools-3.4.0.tgz#9bf8415154301f56906f26a36f5bc1f5ca913bb5"
redux-devtools@^3.4.1:
version "3.4.1"
resolved "https://registry.yarnpkg.com/redux-devtools/-/redux-devtools-3.4.1.tgz#09d342ce0ab6087be679e953a1d7c530efa1138e"
dependencies:
lodash "^4.2.0"
prop-types "^15.5.7"
@ -7444,6 +7380,10 @@ restore-cursor@^2.0.0:
onetime "^2.0.0"
signal-exit "^3.0.2"
ret@~0.1.10:
version "0.1.15"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
right-align@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
@ -7469,6 +7409,13 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
hash-base "^2.0.0"
inherits "^2.0.1"
rst-selector-parser@^2.2.3:
version "2.2.3"
resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91"
dependencies:
lodash.flattendeep "^4.4.0"
nearley "^2.7.10"
run-async@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
@ -8651,6 +8598,10 @@ uid-number@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
underscore@~1.4.4:
version "1.4.4"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604"
underscore@~1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8"
@ -8744,7 +8695,7 @@ uuid@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0:
uuid@^3.0.0, uuid@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
@ -8785,12 +8736,6 @@ walker@~1.0.5:
dependencies:
makeerror "1.0.x"
warning@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/warning/-/warning-2.1.0.tgz#21220d9c63afc77a8c92111e011af705ce0c6901"
dependencies:
loose-envify "^1.0.0"
warning@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
@ -8951,10 +8896,6 @@ whatwg-fetch@>=0.10.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
whatwg-fetch@^0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0"
whatwg-url@^4.3.0:
version "4.8.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0"