diff --git a/.babelrc b/.babelrc
index facd1809..5ae6451c 100644
--- a/.babelrc
+++ b/.babelrc
@@ -1,3 +1,3 @@
{
- "presets": ["es2015", "react"]
-}
\ No newline at end of file
+ "presets": ["react", "latest", "stage-2"]
+}
diff --git a/.codeclimate.yml b/.codeclimate.yml
new file mode 100644
index 00000000..821c1a18
--- /dev/null
+++ b/.codeclimate.yml
@@ -0,0 +1,17 @@
+engines:
+ eslint:
+ enabled: true
+ channel: "eslint-3"
+ duplication:
+ enabled: true
+ config:
+ languages:
+ javascript:
+ratings:
+ paths:
+ - lib/**
+ - "**.js"
+exclude_paths:
+ - "specs/"
+ - "dist/"
+ - "examples/"
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 00000000..91f52e05
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,25 @@
+module.exports = {
+ "env": {
+ "es6": true,
+ "browser": true
+ },
+ "extends": "airbnb",
+ "parserOptions": {
+ "ecmaVersion": 7,
+ "ecmaFeatures": {
+ "experimentalObjectRestSpread": true,
+ "jsx": true
+ },
+ "sourceType": "module"
+ },
+ "parser": "babel-eslint",
+ rules: {
+ "comma-dangle": [2, "only-multiline"],
+ "max-len": [1, {"code": 140}],
+ "no-continue": [0],
+ "no-plusplus": [0],
+ "space-before-function-paren": [2, "always"],
+ "import/no-extraneous-dependencies": [2, {"devDependencies": true}],
+ "react/jsx-filename-extension": ["error", {"extensions": [".js"]}]
+ },
+};
diff --git a/.gitignore b/.gitignore
index 3d6fc093..ae8e3dce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ examples/**/*-bundle.js
node_modules/
.idea/
_book
+coverage
diff --git a/.travis.yml b/.travis.yml
index 29a568b7..d87c7500 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,9 +1,15 @@
language: node_js
node_js:
- "7"
- - "6"
- - "5"
- - "4"
before_script:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
+after_success:
+ - cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js
+script: npm run test:full
+cache: yarn
+addons:
+ sauce_connect:
+ username: "cd-reactmodal"
+ jwt:
+ secure: PpSLvFVrzYYh5zn4SXSkhDsQ3lRxCa4yOwjbVCy3C3smQxgJLKDCHTBp4OcwDlDfPjSsq4nKaQcsOJa9DlduAxMIW98t6pQelqLD9aaEGDbdzyJ4qx5G3fTs6AdU8WJuvVY145zaRcgUdejs5Ii9j1rMna3yS9HfGRE5r4aHNhE=
diff --git a/LICENSE b/LICENSE
index b4846b87..ce689cb8 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2014 Ryan Florence
+Copyright (c) 2017 Ryan Florence
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
diff --git a/README.md b/README.md
index a99339a0..b751aa2e 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,11 @@
Accessible modal dialog component for React.JS
+[](https://codeclimate.com/github/reactjs/react-modal)
+[](https://coveralls.io/github/reactjs/react-modal?branch=master)
+
+[](https://saucelabs.com/beta/builds/ad582339a83145e1a4d3e8b8a1809b6c)
+
## Active Development
The modal is currently undergoing significant development for a v2 release. The `master` branch contains that development work.
If you'd like to see the latest stable version please use the release tags (https://github.com/reactjs/react-modal/releases)
@@ -119,9 +124,9 @@ You can use this to remove scrolling on the the body while the modal is open.
Inside an app:
```js
-var React = require('react');
-var ReactDOM = require('react-dom');
-var Modal = require('react-modal');
+import React from 'react';
+import ReactDOM from 'react-dom';
+import Modal from 'react-modal';
/*
@@ -136,7 +141,7 @@ Modal.setAppElement(appElement);
Modal.setAppElement('#your-app-element');
*/
-var appElement = document.getElementById('your-app-element');
+const appElement = document.getElementById('your-app-element');
@@ -152,26 +157,33 @@ const customStyles = {
};
-var App = React.createClass({
+class App extends React.Component {
+ constructor() {
+ super();
- getInitialState: function() {
- return { modalIsOpen: false };
- },
+ this.state = {
+ modalIsOpen: false
+ };
- openModal: function() {
+ this.openModal = this.openModal.bind(this);
+ this.afterOpenModal = this.afterOpenModal.bind(this);
+ this.closeModal = this.closeModal.bind(this);
+ }
+
+ openModal() {
this.setState({modalIsOpen: true});
- },
+ }
- afterOpenModal: function() {
+ afterOpenModal() {
// references are now sync'd and can be accessed.
this.refs.subtitle.style.color = '#f00';
- },
+ }
- closeModal: function() {
+ closeModal() {
this.setState({modalIsOpen: false});
- },
+ }
- render: function() {
+ render() {
return (
@@ -197,9 +209,9 @@ var App = React.createClass({
);
}
-});
+}
-ReactDOM.render(, appElement);
+ReactDOM.render(, appElement);
```
# Testing
diff --git a/eslint.json b/eslint.json
deleted file mode 100644
index 2035fb08..00000000
--- a/eslint.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "env": {
- "browser": true,
- "node": true
- },
- "rules": {
- "quotes": 0,
- "no-comma-dangle": 2,
- "no-underscore-dangle": 0,
- "curly": 0,
- "strict": 0,
- "no-use-before-define": 0,
- "no-cond-assign": 0,
- "consistent-return": 0,
- "new-cap": 0,
- "no-unused-vars": 0
- }
-}
diff --git a/examples/basic/app.js b/examples/basic/app.js
index 648296a9..167ddc30 100644
--- a/examples/basic/app.js
+++ b/examples/basic/app.js
@@ -1,6 +1,6 @@
-var React = require('react');
-var ReactDOM = require('react-dom');
-var Modal = require('../../lib/index');
+import React from 'react';
+import ReactDOM from 'react-dom';
+import Modal from '../../lib/index';
var appElement = document.getElementById('example');
@@ -9,25 +9,34 @@ Modal.setAppElement('#example');
var App = React.createClass({
getInitialState: function() {
- return { modalIsOpen: false };
+ return { modalIsOpen: false, modal2: false };
},
openModal: function() {
- this.setState({modalIsOpen: true});
+ this.setState({ ...this.state, modalIsOpen: true });
},
closeModal: function() {
- this.setState({modalIsOpen: false});
+ this.setState({ ...this.state, modalIsOpen: false });
+ },
+
+ openSecondModal: function(event) {
+ event.preventDefault();
+ this.setState({ ...this.state, modal2:true });
+ },
+
+ closeSecondModal: function() {
+ this.setState({ ...this.state, modal2:false });
},
handleModalCloseRequest: function() {
// opportunity to validate something and keep the modal open even if it
// requested to be closed
- this.setState({modalIsOpen: false});
+ this.setState({ ...this.state, modalIsOpen: false });
},
handleInputChange: function() {
- this.setState({foo: 'bar'});
+ this.setState({ foo: 'bar' });
},
handleOnAfterOpenModal: function() {
@@ -38,9 +47,11 @@ var App = React.createClass({
render: function() {
return (
-
+
+
hi
+
+
{}}
+ onRequestClose={this.closeSecondModal}>
+ test
+
);
}
diff --git a/karma.conf.js b/karma.conf.js
index 3fe4df80..bccda717 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -1,4 +1,69 @@
-module.exports = function(config) {
+const webpackTestConfig = require('./webpack.test.config');
+
+module.exports = function karmaConfig (config) {
+ let browsers = [];
+ const customLaunchers = {};
+
+ const reporters = [];
+
+ function createCustomLauncher (browser, version, platform) {
+ return {
+ base: 'SauceLabs',
+ browserName: browser,
+ version,
+ platform
+ };
+ }
+
+ if (process.env.SAUCE_USERNAME || process.env.SAUCE_ACCESS_KEY) {
+ const OPTIONS = [
+ 'SAUCE_CHROME',
+ 'SAUCE_FIREFOX',
+ 'SAUCE_SAFARI',
+ 'SAUCE_IE',
+ 'SAUCE_EDGE',
+ ];
+
+ let runAll = true;
+
+ OPTIONS.forEach((opt) => {
+ if (process.env[opt]) {
+ runAll = false;
+ }
+ });
+
+ // Chrome
+ if (runAll || process.env.SAUCE_CHROME) {
+ customLaunchers.SL_Chrome = createCustomLauncher('chrome');
+ }
+
+ // Firefox
+ if (runAll || process.env.SAUCE_FIREFOX) {
+ customLaunchers.SL_Firefox = createCustomLauncher('firefox');
+ }
+
+ // Safari
+ if (runAll || process.env.SAUCE_SAFARI) {
+ customLaunchers.SL_Safari10 = createCustomLauncher('safari', 10);
+ customLaunchers.SL_Safari9 = createCustomLauncher('safari', 9);
+ }
+
+ // IE
+ if (runAll || process.env.SAUCE_IE) {
+ customLaunchers.SL_IE11 = createCustomLauncher('internet explorer', 11, 'Windows 10');
+ }
+
+ // Edge
+ if (runAll || process.env.SAUCE_EDGE) {
+ customLaunchers.SL_Edge = createCustomLauncher('microsoftedge', null, 'Windows 10');
+ }
+
+ browsers = Object.keys(customLaunchers);
+ reporters.push('saucelabs');
+ } else {
+ browsers = [(process.env.CONTINUOUS_INTEGRATION) ? 'Firefox' : 'Chrome'];
+ }
+
config.set({
basePath: '',
@@ -10,21 +75,27 @@ module.exports = function(config) {
],
preprocessors: {
- 'specs/spec_index.js': [ 'webpack', 'sourcemap' ]
+ 'specs/spec_index.js': ['webpack', 'sourcemap']
},
- webpack: require('./webpack.test.config'),
+ webpack: webpackTestConfig,
webpackMiddleware: {
stats: 'errors-only'
},
- reporters: ['mocha'],
+ reporters: ['mocha', 'coverage'].concat(reporters),
mochaReporter: {
showDiff: true
},
+ coverageReporter: {
+ type: 'lcov',
+ dir: 'coverage/',
+ subdir: '.'
+ },
+
port: 9876,
colors: true,
@@ -33,10 +104,25 @@ module.exports = function(config) {
autoWatch: true,
- browsers: [ (process.env.CONTINUOUS_INTEGRATION) ? 'Firefox' : 'Chrome' ],
+ browsers,
+ customLaunchers,
+
+ // Increase timeouts to prevent the issue with disconnected tests (https://goo.gl/nstA69)
+ captureTimeout: 4 * 60 * 1000,
+ browserDisconnectTimeout: 10000,
+ browserDisconnectTolerance: 1,
+ browserNoActivityTimeout: 4 * 60 * 1000,
- captureTimeout: 60000,
+ singleRun: (process.env.CONTINUOUS_INTEGRATION),
- singleRun: (process.env.CONTINUOUS_INTEGRATION)
+ // SauceLabs config
+ sauceLabs: {
+ recordScreenshots: false,
+ connectOptions: {
+ port: 5757,
+ logfile: 'sauce_connect.log'
+ },
+ public: 'public'
+ }
});
};
diff --git a/lib/components/Modal.js b/lib/components/Modal.js
index 61e6de59..93f8e922 100644
--- a/lib/components/Modal.js
+++ b/lib/components/Modal.js
@@ -1,34 +1,23 @@
-var React = require('react');
-var ReactDOM = require('react-dom');
-var ExecutionEnvironment = require('exenv');
-var ModalPortal = React.createFactory(require('./ModalPortal'));
-var ariaAppHider = require('../helpers/ariaAppHider');
-var elementClass = require('element-class');
-var renderSubtreeIntoContainer = require("react-dom").unstable_renderSubtreeIntoContainer;
-var Assign = require('lodash.assign');
-
-var SafeHTMLElement = ExecutionEnvironment.canUseDOM ? window.HTMLElement : {};
-var AppElement = ExecutionEnvironment.canUseDOM ? document.body : {appendChild: function() {}};
-
-function getParentElement(parentSelector) {
+import React, { Component } from 'react';
+import ReactDOM from 'react-dom';
+import ExecutionEnvironment from 'exenv';
+import elementClass from 'element-class';
+import ModalPortal from './ModalPortal';
+import * as ariaAppHider from '../helpers/ariaAppHider';
+import * as refCount from '../helpers/refCount';
+
+const renderSubtreeIntoContainer = ReactDOM.unstable_renderSubtreeIntoContainer;
+
+const SafeHTMLElement = ExecutionEnvironment.canUseDOM ? window.HTMLElement : {};
+
+function getParentElement (parentSelector) {
return parentSelector();
}
-var Modal = React.createClass({
-
- displayName: 'Modal',
- statics: {
- setAppElement: function(element) {
- AppElement = ariaAppHider.setElement(element);
- },
- injectCSS: function() {
- "production" !== process.env.NODE_ENV
- && console.warn('React-Modal: injectCSS has been deprecated ' +
- 'and no longer has any effect. It will be removed in a later version');
- }
- },
+export default class Modal extends Component {
- propTypes: {
+ /* eslint-disable react/no-unused-prop-types */
+ static propTypes = {
isOpen: React.PropTypes.bool.isRequired,
style: React.PropTypes.shape({
content: React.PropTypes.object,
@@ -44,53 +33,96 @@ var Modal = React.createClass({
parentSelector: React.PropTypes.func,
role: React.PropTypes.string,
contentLabel: React.PropTypes.string.isRequired
- },
-
- getDefaultProps: function () {
- return {
- isOpen: false,
- portalClassName: 'ReactModalPortal',
- ariaHideApp: true,
- closeTimeoutMS: 0,
- shouldCloseOnOverlayClick: true,
- parentSelector: function () { return document.body; }
- };
- },
-
- componentDidMount: function() {
+ };
+ /* eslint-enable react/no-unused-prop-types */
+
+ static defaultProps = {
+ isOpen: false,
+ portalClassName: 'ReactModalPortal',
+ ariaHideApp: true,
+ closeTimeoutMS: 0,
+ shouldCloseOnOverlayClick: true,
+ parentSelector () { return document.body; }
+ };
+
+ static defaultStyles = {
+ overlay: {
+ position: 'fixed',
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0,
+ backgroundColor: 'rgba(255, 255, 255, 0.75)'
+ },
+ content: {
+ position: 'absolute',
+ top: '40px',
+ left: '40px',
+ right: '40px',
+ bottom: '40px',
+ border: '1px solid #ccc',
+ background: '#fff',
+ overflow: 'auto',
+ WebkitOverflowScrolling: 'touch',
+ borderRadius: '4px',
+ outline: 'none',
+ padding: '20px'
+ }
+ };
+
+ static setAppElement (element) {
+ ariaAppHider.setElement(element);
+ }
+
+ static injectCSS () {
+ return process.env.NODE_ENV !== 'production'
+ && console.warn('React-Modal: injectCSS has been deprecated ' +
+ 'and no longer has any effect. It will be removed in a later version');
+ }
+
+ componentDidMount () {
this.node = document.createElement('div');
this.node.className = this.props.portalClassName;
- var parent = getParentElement(this.props.parentSelector);
+ if (this.props.isOpen) refCount.add(this);
+
+ const parent = getParentElement(this.props.parentSelector);
parent.appendChild(this.node);
this.renderPortal(this.props);
- },
+ }
+
+ componentWillReceiveProps (newProps) {
+ if (newProps.isOpen) refCount.add(this);
+ if (!newProps.isOpen) refCount.remove(this);
- componentWillReceiveProps: function(newProps) {
- var currentParent = getParentElement(this.props.parentSelector);
- var newParent = getParentElement(newProps.parentSelector);
+ const currentParent = getParentElement(this.props.parentSelector);
+ const newParent = getParentElement(newProps.parentSelector);
- if(newParent !== currentParent) {
+ if (newParent !== currentParent) {
currentParent.removeChild(this.node);
newParent.appendChild(this.node);
}
this.renderPortal(newProps);
- },
+ }
+
+ componentWillUnmount () {
+ refCount.remove(this);
- componentWillUnmount: function() {
if (this.props.ariaHideApp) {
ariaAppHider.show(this.props.appElement);
}
ReactDOM.unmountComponentAtNode(this.node);
- var parent = getParentElement(this.props.parentSelector);
+ const parent = getParentElement(this.props.parentSelector);
parent.removeChild(this.node);
- elementClass(document.body).remove('ReactModal__Body--open');
- },
+ if (refCount.count() === 0) {
+ elementClass(document.body).remove('ReactModal__Body--open');
+ }
+ }
- renderPortal: function(props) {
- if (props.isOpen) {
+ renderPortal (props) {
+ if (props.isOpen || refCount.count() > 0) {
elementClass(document.body).add('ReactModal__Body--open');
} else {
elementClass(document.body).remove('ReactModal__Body--open');
@@ -100,37 +132,14 @@ var Modal = React.createClass({
ariaAppHider.toggle(props.isOpen, props.appElement);
}
- this.portal = renderSubtreeIntoContainer(this, ModalPortal(Assign({}, props, {defaultStyles: Modal.defaultStyles})), this.node);
- },
-
- render: function () {
- return React.DOM.noscript();
+ this.portal = renderSubtreeIntoContainer(this,
+ , this.node);
}
-});
-
-Modal.defaultStyles = {
- overlay: {
- position : 'fixed',
- top : 0,
- left : 0,
- right : 0,
- bottom : 0,
- backgroundColor : 'rgba(255, 255, 255, 0.75)'
- },
- content: {
- position : 'absolute',
- top : '40px',
- left : '40px',
- right : '40px',
- bottom : '40px',
- border : '1px solid #ccc',
- background : '#fff',
- overflow : 'auto',
- WebkitOverflowScrolling : 'touch',
- borderRadius : '4px',
- outline : 'none',
- padding : '20px'
+
+ render () {
+ return null;
}
}
-
-module.exports = Modal
diff --git a/lib/components/ModalPortal.js b/lib/components/ModalPortal.js
index e7d056a0..246d07db 100644
--- a/lib/components/ModalPortal.js
+++ b/lib/components/ModalPortal.js
@@ -1,11 +1,16 @@
-var React = require('react');
-var div = React.DOM.div;
-var focusManager = require('../helpers/focusManager');
-var scopeTab = require('../helpers/scopeTab');
-var Assign = require('lodash.assign');
+import React, { Component, PropTypes } from 'react';
+import Assign from 'lodash.assign';
+import scopeTab from '../helpers/scopeTab';
+import {
+ returnFocus,
+ setupScopedFocus,
+ teardownScopedFocus,
+ markForFocusLater
+} from '../helpers/focusManager';
+
// so that our CSS is statically analyzable
-var CLASS_NAMES = {
+const CLASS_NAMES = {
overlay: {
base: 'ReactModal__Overlay',
afterOpen: 'ReactModal__Overlay--after-open',
@@ -18,40 +23,53 @@ var CLASS_NAMES = {
}
};
-var ModalPortal = module.exports = React.createClass({
-
- displayName: 'ModalPortal',
- shouldClose: null,
-
- getDefaultProps: function() {
- return {
- style: {
- overlay: {},
- content: {}
- }
- };
- },
+export default class ModalPortal extends Component {
+ static propTypes = {
+ isOpen: PropTypes.bool.isRequired,
+ onAfterOpen: PropTypes.func,
+ closeTimeoutMS: PropTypes.number,
+ shouldCloseOnOverlayClick: PropTypes.bool,
+ onRequestClose: PropTypes.func,
+ className: PropTypes.string,
+ overlayClassName: PropTypes.string,
+ defaultStyles: PropTypes.shape({
+ content: PropTypes.object,
+ overlay: PropTypes.object
+ }),
+ style: PropTypes.shape({
+ content: PropTypes.object,
+ overlay: PropTypes.object
+ }),
+ role: PropTypes.string,
+ children: PropTypes.node,
+ contentLabel: PropTypes.string
+ };
+
+ static defaultProps = {
+ style: {
+ overlay: {},
+ content: {}
+ }
+ };
- getInitialState: function() {
- return {
+ constructor () {
+ super();
+ this.state = {
afterOpen: false,
beforeClose: false
};
- },
+ this.shouldClose = null;
+ }
- componentDidMount: function() {
+ componentDidMount () {
// Focus needs to be set when mounting and already open
if (this.props.isOpen) {
this.setFocusAfterRender(true);
this.open();
}
- },
-
- componentWillUnmount: function() {
- clearTimeout(this.closeTimer);
- },
+ }
- componentWillReceiveProps: function(newProps) {
+ componentWillReceiveProps (newProps) {
// Focus only needs to be set once when the modal is being opened
if (!this.props.isOpen && newProps.isOpen) {
this.setFocusAfterRender(true);
@@ -59,153 +77,155 @@ var ModalPortal = module.exports = React.createClass({
} else if (this.props.isOpen && !newProps.isOpen) {
this.close();
}
- },
+ }
- componentDidUpdate: function () {
+ componentDidUpdate () {
if (this.focusAfterRender) {
this.focusContent();
this.setFocusAfterRender(false);
}
- },
+ }
+
+ componentWillUnmount () {
+ clearTimeout(this.closeTimer);
+ }
- setFocusAfterRender: function (focus) {
+ setFocusAfterRender (focus) {
this.focusAfterRender = focus;
- },
+ }
- open: function() {
+ afterClose = () => {
+ returnFocus();
+ teardownScopedFocus();
+ }
+
+ open () {
if (this.state.afterOpen && this.state.beforeClose) {
clearTimeout(this.closeTimer);
this.setState({ beforeClose: false });
} else {
- focusManager.setupScopedFocus(this.node);
- focusManager.markForFocusLater();
- this.setState({isOpen: true}, function() {
- this.setState({afterOpen: true});
+ setupScopedFocus(this.node);
+ markForFocusLater();
+ this.setState({ isOpen: true }, () => {
+ this.setState({ afterOpen: true });
if (this.props.isOpen && this.props.onAfterOpen) {
this.props.onAfterOpen();
}
- }.bind(this));
+ });
}
- },
+ }
- close: function() {
- if (this.props.closeTimeoutMS > 0)
+ close () {
+ if (this.props.closeTimeoutMS > 0) {
this.closeWithTimeout();
- else
+ } else {
this.closeWithoutTimeout();
- },
+ }
+ }
- focusContent: function() {
+ focusContent () {
// Don't steal focus from inner elements
if (!this.contentHasFocus()) {
- this.refs.content.focus();
+ this.content.focus();
}
- },
+ }
- closeWithTimeout: function() {
- this.setState({beforeClose: true}, function() {
+ closeWithTimeout () {
+ this.setState({ beforeClose: true }, () => {
this.closeTimer = setTimeout(this.closeWithoutTimeout, this.props.closeTimeoutMS);
- }.bind(this));
- },
+ });
+ }
- closeWithoutTimeout: function() {
+ closeWithoutTimeout = () => {
this.setState({
beforeClose: false,
isOpen: false,
afterOpen: false,
- }, this.afterClose);
- },
-
- afterClose: function() {
- focusManager.returnFocus();
- focusManager.teardownScopedFocus();
- },
+ }, () => this.afterClose());
+ }
- handleKeyDown: function(event) {
- if (event.keyCode == 9 /*tab*/) scopeTab(this.refs.content, event);
- if (event.keyCode == 27 /*esc*/) {
+ handleKeyDown = (event) => {
+ if (event.keyCode === 9 /* tab*/) scopeTab(this.content, event);
+ if (event.keyCode === 27 /* esc*/) {
event.preventDefault();
this.requestClose(event);
}
- },
+ }
- handleOverlayMouseDown: function(event) {
+ handleOverlayOnClick = (event) => {
if (this.shouldClose === null) {
this.shouldClose = true;
}
- },
-
- handleOverlayMouseUp: function(event) {
if (this.shouldClose && this.props.shouldCloseOnOverlayClick) {
- if (this.ownerHandlesClose())
+ if (this.ownerHandlesClose()) {
this.requestClose(event);
- else
+ } else {
this.focusContent();
+ }
}
this.shouldClose = null;
- },
-
- handleContentMouseDown: function(event) {
- this.shouldClose = false;
- },
+ }
- handleContentMouseUp: function(event) {
+ handleContentOnClick = () => {
this.shouldClose = false;
- },
+ }
- requestClose: function(event) {
- if (this.ownerHandlesClose())
+ requestClose (event) {
+ if (this.ownerHandlesClose()) {
this.props.onRequestClose(event);
- },
+ }
+ }
- ownerHandlesClose: function() {
+ ownerHandlesClose () {
return this.props.onRequestClose;
- },
+ }
- shouldBeClosed: function() {
+ shouldBeClosed () {
return !this.props.isOpen && !this.state.beforeClose;
- },
+ }
- contentHasFocus: function() {
- return document.activeElement === this.refs.content || this.refs.content.contains(document.activeElement);
- },
+ contentHasFocus () {
+ return document.activeElement === this.content || this.content.contains(document.activeElement);
+ }
- buildClassName: function(which, additional) {
- var className = CLASS_NAMES[which].base;
- if (this.state.afterOpen)
- className += ' '+CLASS_NAMES[which].afterOpen;
- if (this.state.beforeClose)
- className += ' '+CLASS_NAMES[which].beforeClose;
- return additional ? className + ' ' + additional : className;
- },
+ buildClassName (which, additional) {
+ let className = CLASS_NAMES[which].base;
+ if (this.state.afterOpen) { className += ` ${CLASS_NAMES[which].afterOpen}`; }
+ if (this.state.beforeClose) {
+ className += ` ${CLASS_NAMES[which].beforeClose}`;
+ }
+ return additional ? `${className} ${additional}` : className;
+ }
- render: function() {
- var contentStyles = (this.props.className) ? {} : this.props.defaultStyles.content;
- var overlayStyles = (this.props.overlayClassName) ? {} : this.props.defaultStyles.overlay;
-
- return this.shouldBeClosed() ? div() : (
- div({
- ref: "overlay",
- className: this.buildClassName('overlay', this.props.overlayClassName),
- style: Assign({}, overlayStyles, this.props.style.overlay || {}),
- onMouseDown: this.handleOverlayMouseDown,
- onMouseUp: this.handleOverlayMouseUp
- },
- div({
- ref: "content",
- style: Assign({}, contentStyles, this.props.style.content || {}),
- className: this.buildClassName('content', this.props.className),
- tabIndex: "-1",
- onKeyDown: this.handleKeyDown,
- onMouseDown: this.handleContentMouseDown,
- onMouseUp: this.handleContentMouseUp,
- role: this.props.role,
- "aria-label": this.props.contentLabel
- },
- this.props.children
- )
- )
+ render () {
+ const contentStyles = (this.props.className) ? {} : this.props.defaultStyles.content;
+ const overlayStyles = (this.props.overlayClassName) ? {} : this.props.defaultStyles.overlay;
+
+ // Disabling this rule is okay, since we know what is going on here, that being said
+ // longterm we should probably do this better.
+ /* eslint-disable jsx-a11y/no-static-element-interactions */
+ return this.shouldBeClosed() ? : (
+ { this.overlay = c; }}
+ className={this.buildClassName('overlay', this.props.overlayClassName)}
+ style={Assign({}, overlayStyles, this.props.style.overlay || {})}
+ onClick={this.handleOverlayOnClick}
+ >
+
{ this.content = c; }}
+ style={Assign({}, contentStyles, this.props.style.content || {})}
+ className={this.buildClassName('content', this.props.className)}
+ tabIndex={-1}
+ onKeyDown={this.handleKeyDown}
+ onClick={this.handleContentOnClick}
+ role={this.props.role}
+ aria-label={this.props.contentLabel}
+ >
+ {this.props.children}
+
+
);
+ /* eslint-enable jsx-a11y/no-static-element-interactions */
}
-});
+}
diff --git a/lib/helpers/ariaAppHider.js b/lib/helpers/ariaAppHider.js
index 05b4c128..f5ee72e9 100644
--- a/lib/helpers/ariaAppHider.js
+++ b/lib/helpers/ariaAppHider.js
@@ -1,42 +1,37 @@
-var _element = typeof document !== 'undefined' ? document.body : null;
+let globalElement = typeof document !== 'undefined' ? document.body : null;
-function setElement(element) {
- if (typeof element === 'string') {
- var el = document.querySelectorAll(element);
- element = 'length' in el ? el[0] : el;
+function validateElement (appElement) {
+ if (!appElement && !globalElement) {
+ throw new Error('react-modal: You must set an element with `Modal.setAppElement(el)` to make this accessible');
}
- _element = element || _element;
- return _element;
}
-function hide(appElement) {
- validateElement(appElement);
- (appElement || _element).setAttribute('aria-hidden', 'true');
+export function setElement (element) {
+ let newElement = element;
+ if (typeof newElement === 'string') {
+ const el = document.querySelectorAll(element);
+ newElement = 'length' in el ? el[0] : el;
+ }
+ globalElement = newElement || globalElement;
+ return globalElement;
}
-function show(appElement) {
+export function hide (appElement) {
validateElement(appElement);
- (appElement || _element).removeAttribute('aria-hidden');
+ (appElement || globalElement).setAttribute('aria-hidden', 'true');
}
-function toggle(shouldHide, appElement) {
- if (shouldHide)
- hide(appElement);
- else
- show(appElement);
+export function show (appElement) {
+ validateElement(appElement);
+ (appElement || globalElement).removeAttribute('aria-hidden');
}
-function validateElement(appElement) {
- if (!appElement && !_element)
- throw new Error('react-modal: You must set an element with `Modal.setAppElement(el)` to make this accessible');
+export function toggle (shouldHide, appElement) {
+ if (shouldHide) {
+ hide(appElement);
+ } else { show(appElement); }
}
-function resetForTesting() {
- _element = document.body;
+export function resetForTesting () {
+ globalElement = document.body;
}
-
-exports.toggle = toggle;
-exports.setElement = setElement;
-exports.show = show;
-exports.hide = hide;
-exports.resetForTesting = resetForTesting;
diff --git a/lib/helpers/focusManager.js b/lib/helpers/focusManager.js
index 548f69db..42844ff7 100644
--- a/lib/helpers/focusManager.js
+++ b/lib/helpers/focusManager.js
@@ -1,13 +1,14 @@
-var findTabbable = require('../helpers/tabbable');
-var modalElement = null;
-var focusLaterElement = null;
-var needToFocus = false;
+import findTabbable from './tabbable';
-function handleBlur(event) {
+const focusLaterElements = [];
+let modalElement = null;
+let needToFocus = false;
+
+function handleBlur () {
needToFocus = true;
}
-function handleFocus(event) {
+function handleFocus () {
if (needToFocus) {
needToFocus = false;
if (!modalElement) {
@@ -15,33 +16,35 @@ function handleFocus(event) {
}
// need to see how jQuery shims document.on('focusin') so we don't need the
// setTimeout, firefox doesn't support focusin, if it did, we could focus
- // the element outside of a setTimeout. Side-effect of this implementation
- // is that the document.body gets focus, and then we focus our element right
+ // the element outside of a setTimeout. Side-effect of this implementation
+ // is that the document.body gets focus, and then we focus our element right
// after, seems fine.
- setTimeout(function() {
- if (modalElement.contains(document.activeElement))
+ setTimeout(() => {
+ if (modalElement.contains(document.activeElement)) {
return;
- var el = (findTabbable(modalElement)[0] || modalElement);
+ }
+ const el = (findTabbable(modalElement)[0] || modalElement);
el.focus();
}, 0);
}
}
-exports.markForFocusLater = function() {
- focusLaterElement = document.activeElement;
-};
+export function markForFocusLater () {
+ focusLaterElements.push(document.activeElement);
+}
-exports.returnFocus = function() {
+export function returnFocus () {
+ let toFocus = null;
try {
- focusLaterElement.focus();
+ toFocus = focusLaterElements.pop();
+ toFocus.focus();
+ return;
+ } catch (e) {
+ console.warn(`You tried to return focus to ${toFocus} but it is not in the DOM anymore`);
}
- catch (e) {
- console.warn('You tried to return focus to '+focusLaterElement+' but it is not in the DOM anymore');
- }
- focusLaterElement = null;
-};
+}
-exports.setupScopedFocus = function(element) {
+export function setupScopedFocus (element) {
modalElement = element;
if (window.addEventListener) {
@@ -51,9 +54,9 @@ exports.setupScopedFocus = function(element) {
window.attachEvent('onBlur', handleBlur);
document.attachEvent('onFocus', handleFocus);
}
-};
+}
-exports.teardownScopedFocus = function() {
+export function teardownScopedFocus () {
modalElement = null;
if (window.addEventListener) {
@@ -63,6 +66,4 @@ exports.teardownScopedFocus = function() {
window.detachEvent('onBlur', handleBlur);
document.detachEvent('onFocus', handleFocus);
}
-};
-
-
+}
diff --git a/lib/helpers/refCount.js b/lib/helpers/refCount.js
new file mode 100644
index 00000000..8bcfdd49
--- /dev/null
+++ b/lib/helpers/refCount.js
@@ -0,0 +1,19 @@
+const modals = [];
+
+export function add (element) {
+ if (modals.indexOf(element) === -1) {
+ modals.push(element);
+ }
+}
+
+export function remove (element) {
+ const index = modals.indexOf(element);
+ if (index === -1) {
+ return;
+ }
+ modals.splice(index, 1);
+}
+
+export function count () {
+ return modals.length;
+}
diff --git a/lib/helpers/scopeTab.js b/lib/helpers/scopeTab.js
index d368bd8f..8df67faf 100644
--- a/lib/helpers/scopeTab.js
+++ b/lib/helpers/scopeTab.js
@@ -1,19 +1,19 @@
-var findTabbable = require('../helpers/tabbable');
+import findTabbable from './tabbable';
-module.exports = function(node, event) {
- var tabbable = findTabbable(node);
+export default function scopeTab (node, event) {
+ const tabbable = findTabbable(node);
if (!tabbable.length) {
- event.preventDefault();
- return;
+ event.preventDefault();
+ return;
}
- var finalTabbable = tabbable[event.shiftKey ? 0 : tabbable.length - 1];
- var leavingFinalTabbable = (
+ const finalTabbable = tabbable[event.shiftKey ? 0 : tabbable.length - 1];
+ const leavingFinalTabbable = (
finalTabbable === document.activeElement ||
// handle immediate shift+tab after opening with mouse
node === document.activeElement
);
if (!leavingFinalTabbable) return;
event.preventDefault();
- var target = tabbable[event.shiftKey ? tabbable.length - 1 : 0];
+ const target = tabbable[event.shiftKey ? tabbable.length - 1 : 0];
target.focus();
-};
+}
diff --git a/lib/helpers/tabbable.js b/lib/helpers/tabbable.js
index 4b04f88b..26b8ccdf 100644
--- a/lib/helpers/tabbable.js
+++ b/lib/helpers/tabbable.js
@@ -10,41 +10,40 @@
* http://api.jqueryui.com/category/ui-core/
*/
-function focusable(element, isTabIndexNotNaN) {
- var nodeName = element.nodeName.toLowerCase();
- return (/input|select|textarea|button|object/.test(nodeName) ?
- !element.disabled :
- "a" === nodeName ?
- element.href || isTabIndexNotNaN :
- isTabIndexNotNaN) && visible(element);
-}
+ function hidden (el) {
+ return (el.offsetWidth <= 0 && el.offsetHeight <= 0) ||
+ el.style.display === 'none';
+ }
-function hidden(el) {
- return (el.offsetWidth <= 0 && el.offsetHeight <= 0) ||
- el.style.display === 'none';
-}
+ function visible (element) {
+ let ourElement = element;
+ while (ourElement) {
+ if (ourElement === document.body) break;
+ if (hidden(ourElement)) return false;
+ ourElement = ourElement.parentNode;
+ }
+ return true;
+ }
-function visible(element) {
- while (element) {
- if (element === document.body) break;
- if (hidden(element)) return false;
- element = element.parentNode;
- }
- return true;
-}
+ function focusable (element, isTabIndexNotNaN) {
+ const nodeName = element.nodeName.toLowerCase();
+ const isFocusableLink = nodeName === 'a' ?
+ element.href || isTabIndexNotNaN : isTabIndexNotNaN;
+ return (/input|select|textarea|button|object/.test(nodeName) ?
+ !element.disabled : isFocusableLink
+ ) && visible(element);
+ }
-function tabbable(element) {
- var tabIndex = element.getAttribute('tabindex');
- if (tabIndex === null) tabIndex = undefined;
- var isTabIndexNaN = isNaN(tabIndex);
- return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN);
-}
-function findTabbableDescendants(element) {
- return [].slice.call(element.querySelectorAll('*'), 0).filter(function(el) {
- return tabbable(el);
- });
-}
+ function tabbable (element) {
+ let tabIndex = element.getAttribute('tabindex');
+ if (tabIndex === null) tabIndex = undefined;
+ const isTabIndexNaN = isNaN(tabIndex);
+ return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN);
+ }
-module.exports = findTabbableDescendants;
+ function findTabbableDescendants (element) {
+ return [].slice.call(element.querySelectorAll('*'), 0).filter(el => tabbable(el));
+ }
+ export default findTabbableDescendants;
diff --git a/lib/index.js b/lib/index.js
index adfa4481..8ecf0994 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -1,2 +1,3 @@
-module.exports = require('./components/Modal');
+import Modal from './components/Modal';
+export default Modal;
diff --git a/package.json b/package.json
index 25f0b685..c4e9de17 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
},
"scripts": {
"test": "NODE_ENV=test karma start",
+ "test:full": "npm-run-all -p 'test -- --single-run' lint",
"start": "scripts/dev-examples",
"docs": "npm-run-all docs:*",
"docs-dev": "npm-run-all docs:clean docs:prepare docs:build:watch",
@@ -21,7 +22,8 @@
"docs:prepare": "gitbook install",
"docs:build": "gitbook build -g reactjs/react-modal",
"docs:build:watch": "gitbook serve",
- "docs:publish": "cd _book && git init && git commit --allow-empty -m 'update book' && git checkout -b gh-pages && touch .nojekyll && git add . && git commit -am 'update book' && git push git@github.com:reactjs/react-modal gh-pages --force"
+ "docs:publish": "cd _book && git init && git commit --allow-empty -m 'update book' && git checkout -b gh-pages && touch .nojekyll && git add . && git commit -am 'update book' && git push git@github.com:reactjs/react-modal gh-pages --force",
+ "lint": "eslint lib/ specs/"
},
"authors": [
"Ryan Florence"
@@ -29,18 +31,31 @@
"license": "MIT",
"devDependencies": {
"babel-core": "^6.7.4",
+ "babel-eslint": "^7.1.1",
"babel-loader": "^6.2.4",
"babel-preset-es2015": "^6.6.0",
+ "babel-preset-latest": "^6.16.0",
"babel-preset-react": "^6.5.0",
+ "babel-preset-stage-2": "^6.18.0",
+ "codeclimate-test-reporter": "^0.4.0",
+ "coveralls": "^2.11.15",
"envify": "^3.4.1",
- "expect": "^1.20.2",
+ "eslint": "^3.9.1",
+ "eslint-config-airbnb": "latest",
+ "eslint-plugin-import": "^2.1.0",
+ "eslint-plugin-jsx-a11y": "^2.2.3",
+ "eslint-plugin-react": "^6.6.0",
+ "expect": "1.10.0",
"gitbook-cli": "^2.3.0",
+ "istanbul-instrumenter-loader": "0.2.0",
"karma": "^1.3.0",
"karma-chrome-launcher": "2.0.0",
"karma-cli": "1.0.1",
+ "karma-coverage": "^1.1.1",
"karma-firefox-launcher": "1.0.0",
"karma-mocha": "^1.3.0",
"karma-mocha-reporter": "^2.2.1",
+ "karma-sauce-launcher": "^1.1.0",
"karma-sourcemap-loader": "^0.3.7",
"karma-webpack": "^1.8.1",
"mocha": "3.2.0",
@@ -75,4 +90,4 @@
"modal",
"dialog"
]
-}
\ No newline at end of file
+}
diff --git a/specs/Modal.spec.js b/specs/Modal.spec.js
index c4003609..c893c430 100644
--- a/specs/Modal.spec.js
+++ b/specs/Modal.spec.js
@@ -1,38 +1,44 @@
/* eslint-env mocha */
-import { renderModal, unmountModal } from './helper';
+
+// The following eslint overrides should be removed when refactoring can occur
+
+/* eslint react/no-find-dom-node: "warn",
+ react/no-render-return-value: "warn"
+*/
import TestUtils from 'react-addons-test-utils';
import React from 'react';
+import sinon from 'sinon';
+import expect from 'expect';
import ReactDOM from 'react-dom';
import Modal from '../lib/components/Modal';
-import ariaAppHider from '../lib/helpers/ariaAppHider';
+import * as ariaAppHider from '../lib/helpers/ariaAppHider';
+import { renderModal, unmountModal } from './helper';
+
const Simulate = TestUtils.Simulate;
-import sinon from 'sinon';
-import expect from 'expect';
-describe('Modal', function () {
+describe('Modal', () => {
it('scopes tab navigation to the modal');
it('focuses the last focused element when tabbing in from browser chrome');
-
- it('can be open initially', function() {
- var component = renderModal({isOpen: true}, 'hello');
- expect(component.portal.refs.content.innerHTML.trim()).toEqual('hello');
+ it('can be open initially', () => {
+ const component = renderModal({ isOpen: true }, 'hello');
+ expect(component.portal.content.innerHTML.trim()).toEqual('hello');
unmountModal();
});
- it('can be closed initially', function() {
- var component = renderModal({}, 'hello');
+ it('can be closed initially', () => {
+ const component = renderModal({}, 'hello');
expect(ReactDOM.findDOMNode(component.portal).innerHTML.trim()).toEqual('');
unmountModal();
});
- it('accepts appElement as a prop', function() {
- var el = document.createElement('div');
- var node = document.createElement('div');
+ it('accepts appElement as a prop', () => {
+ const el = document.createElement('div');
+ const node = document.createElement('div');
ReactDOM.render(
, node);
@@ -40,52 +46,48 @@ describe('Modal', function () {
ReactDOM.unmountComponentAtNode(node);
});
- it('renders into the body, not in context', function() {
- var node = document.createElement('div');
- var App = React.createClass({
- render() {
- return (
-
-
- hello
-
-
- );
- }
- });
+ it('renders into the body, not in context', () => {
+ const node = document.createElement('div');
+ const App = () => (
+
+
+ hello
+
+
+ );
Modal.setAppElement(node);
ReactDOM.render(, node);
- var modalParent = document.body.querySelector('.ReactModalPortal').parentNode;
+ const modalParent = document.body.querySelector('.ReactModalPortal').parentNode;
expect(modalParent).toEqual(document.body);
ReactDOM.unmountComponentAtNode(node);
});
- it('renders children', function() {
- var child = 'I am a child of Modal, and he has sent me here...';
- var component = renderModal({isOpen: true}, child);
- expect(component.portal.refs.content.innerHTML).toEqual(child);
+ it('renders children', () => {
+ const child = 'I am a child of Modal, and he has sent me here...';
+ const component = renderModal({ isOpen: true }, child);
+ expect(component.portal.content.innerHTML).toEqual(child);
unmountModal();
});
- it('renders the modal content with a dialog aria role when provided ', function () {
- var child = 'I am a child of Modal, and he has sent me here...';
- var component = renderModal({isOpen: true, role: 'dialog'}, child);
- expect(component.portal.refs.content.getAttribute('role')).toEqual('dialog');
+ it('renders the modal content with a dialog aria role when provided ', () => {
+ const child = 'I am a child of Modal, and he has sent me here...';
+ const component = renderModal({ isOpen: true, role: 'dialog' }, child);
+ expect(component.portal.content.getAttribute('role')).toEqual('dialog');
unmountModal();
});
- it('renders the modal with a aria-label based on the contentLabel prop', function () {
- var child = 'I am a child of Modal, and he has sent me here...';
- var component = renderModal({isOpen: true, contentLabel: 'Special Modal'}, child);
- expect(component.portal.refs.content.getAttribute('aria-label')).toEqual('Special Modal');
+ it('renders the modal with a aria-label based on the contentLabel prop', () => {
+ const child = 'I am a child of Modal, and he has sent me here...';
+ const component = renderModal({ isOpen: true, contentLabel: 'Special Modal' }, child);
+ expect(component.portal.content.getAttribute('aria-label')).toEqual('Special Modal');
unmountModal();
});
- it('has default props', function() {
- var node = document.createElement('div');
+ it('has default props', () => {
+ const node = document.createElement('div');
Modal.setAppElement(document.createElement('div'));
- var component = ReactDOM.render(, node);
- var props = component.props;
+ const component = ReactDOM.render(, node);
+ const props = component.props;
expect(props.isOpen).toBe(false);
expect(props.ariaHideApp).toBe(true);
expect(props.closeTimeoutMS).toBe(0);
@@ -95,136 +97,189 @@ describe('Modal', function () {
Modal.setAppElement(document.body); // restore default
});
- it('removes the portal node', function() {
- var component = renderModal({isOpen: true}, 'hello');
- expect(component.portal.refs.content.innerHTML.trim()).toEqual('hello');
+ it('removes the portal node', () => {
+ const component = renderModal({ isOpen: true }, 'hello');
+ expect(component.portal.content.innerHTML.trim()).toEqual('hello');
unmountModal();
expect(!document.querySelector('.ReactModalPortal')).toExist();
});
- it('focuses the modal content', function() {
- renderModal({isOpen: true}, null, function () {
- expect(document.activeElement).toEqual(this.portal.refs.content);
+ it('focuses the modal content', () => {
+ renderModal({ isOpen: true }, null, function checkModalContentFocus () {
+ expect(document.activeElement).toEqual(this.portal.content);
unmountModal();
});
});
- it('does not focus the modal content when a descendent is already focused', function() {
- var input = (
+ it('give back focus to previous element or modal.', (done) => {
+ function cleanup () {
+ unmountModal();
+ done();
+ }
+ const modal = renderModal({
+ isOpen: true,
+ onRequestClose () {
+ cleanup();
+ }
+ }, null, () => {});
+
+ renderModal({
+ isOpen: true,
+ onRequestClose () {
+ unmountModal();
+ Simulate.keyDown(modal.portal.content, {
+ // The keyCode is all that matters, so this works
+ key: 'FakeKeyToTestLater',
+ keyCode: 27,
+ which: 27
+ });
+ expect(document.activeElement).toEqual(modal.portal.content);
+ }
+ }, null, function checkPortalFocus () {
+ expect(document.activeElement).toEqual(this.portal.content);
+ Simulate.keyDown(this.portal.content, {
+ // The keyCode is all that matters, so this works
+ key: 'FakeKeyToTestLater',
+ keyCode: 27,
+ which: 27
+ });
+ });
+ });
+
+ it('does not focus the modal content when a descendent is already focused', () => {
+ const input = (
{ el && el.focus(); }}
+ ref={el => (el && el.focus())}
/>
);
- renderModal({isOpen: true}, input, function () {
+ renderModal({ isOpen: true }, input, () => {
expect(document.activeElement).toEqual(document.querySelector('.focus_input'));
unmountModal();
});
});
- it('handles case when child has no tabbable elements', function() {
- var component = renderModal({isOpen: true}, 'hello');
- expect(function() {
- Simulate.keyDown(component.portal.refs.content, {key: "Tab", keyCode: 9, which: 9})
- }).toNotThrow;
+ it('handles case when child has no tabbable elements', () => {
+ const component = renderModal({ isOpen: true }, 'hello');
+ expect(() => {
+ Simulate.keyDown(component.portal.content, { key: 'Tab', keyCode: 9, which: 9 });
+ }).toNotThrow();
unmountModal();
});
- it('keeps focus inside the modal when child has no tabbable elements', function() {
- var tabPrevented = false;
- var modal = renderModal({isOpen: true}, 'hello');
- expect(document.activeElement).toEqual(modal.portal.refs.content);
- Simulate.keyDown(modal.portal.refs.content, {
- key: "Tab",
- keyCode: 9,
- which: 9,
- preventDefault: function() { tabPrevented = true; }
+ it('keeps focus inside the modal when child has no tabbable elements', () => {
+ let tabPrevented = false;
+ const modal = renderModal({ isOpen: true }, 'hello');
+ expect(document.activeElement).toEqual(modal.portal.content);
+ Simulate.keyDown(modal.portal.content, {
+ key: 'Tab',
+ keyCode: 9,
+ which: 9,
+ preventDefault () { tabPrevented = true; }
});
expect(tabPrevented).toEqual(true);
+ unmountModal();
});
- it('supports portalClassName', function () {
- var modal = renderModal({isOpen: true, portalClassName: 'myPortalClass'});
+ it('supports portalClassName', () => {
+ const modal = renderModal({ isOpen: true, portalClassName: 'myPortalClass' });
expect(modal.node.className).toEqual('myPortalClass');
unmountModal();
});
- it('supports custom className', function() {
- var modal = renderModal({isOpen: true, className: 'myClass'});
- expect(modal.portal.refs.content.className.indexOf('myClass')).toNotEqual(-1);
+ it('supports custom className', () => {
+ const modal = renderModal({ isOpen: true, className: 'myClass' });
+ expect(modal.portal.content.className.indexOf('myClass')).toNotEqual(-1);
unmountModal();
});
- it('supports overlayClassName', function () {
- var modal = renderModal({isOpen: true, overlayClassName: 'myOverlayClass'});
- expect(modal.portal.refs.overlay.className.indexOf('myOverlayClass')).toNotEqual(-1);
+ it('supports overlayClassName', () => {
+ const modal = renderModal({ isOpen: true, overlayClassName: 'myOverlayClass' });
+ expect(modal.portal.overlay.className.indexOf('myOverlayClass')).toNotEqual(-1);
unmountModal();
});
- it('overrides the default styles when a custom classname is used', function () {
- var modal = renderModal({isOpen: true, className: 'myClass'});
- expect(modal.portal.refs.content.style.top).toEqual('');
+ it('overrides the default styles when a custom classname is used', () => {
+ const modal = renderModal({ isOpen: true, className: 'myClass' });
+ expect(modal.portal.content.style.top).toEqual('');
unmountModal();
});
- it('overrides the default styles when a custom overlayClassName is used', function () {
- var modal = renderModal({isOpen: true, overlayClassName: 'myOverlayClass'});
- expect(modal.portal.refs.overlay.style.backgroundColor).toEqual('');
+ it('overrides the default styles when a custom overlayClassName is used', () => {
+ const modal = renderModal({ isOpen: true, overlayClassName: 'myOverlayClass' });
+ expect(modal.portal.overlay.style.backgroundColor).toEqual('');
+ unmountModal();
});
- it('supports adding style to the modal contents', function () {
- var modal = renderModal({isOpen: true, style: {content: {width: '20px'}}});
- expect(modal.portal.refs.content.style.width).toEqual('20px');
+ it('supports adding style to the modal contents', () => {
+ const modal = renderModal({ isOpen: true, style: { content: { width: '20px' } } });
+ expect(modal.portal.content.style.width).toEqual('20px');
+ unmountModal();
});
- it('supports overriding style on the modal contents', function() {
- var modal = renderModal({isOpen: true, style: {content: {position: 'static'}}});
- expect(modal.portal.refs.content.style.position).toEqual('static');
+ it('supports overriding style on the modal contents', () => {
+ const modal = renderModal({ isOpen: true, style: { content: { position: 'static' } } });
+ expect(modal.portal.content.style.position).toEqual('static');
+ unmountModal();
});
- it('supports adding style on the modal overlay', function() {
- var modal = renderModal({isOpen: true, style: {overlay: {width: '75px'}}});
- expect(modal.portal.refs.overlay.style.width).toEqual('75px');
+ it('supports adding style on the modal overlay', () => {
+ const modal = renderModal({ isOpen: true, style: { overlay: { width: '75px' } } });
+ expect(modal.portal.overlay.style.width).toEqual('75px');
+ unmountModal();
});
- it('supports overriding style on the modal overlay', function() {
- var modal = renderModal({isOpen: true, style: {overlay: {position: 'static'}}});
- expect(modal.portal.refs.overlay.style.position).toEqual('static');
+ it('supports overriding style on the modal overlay', () => {
+ const modal = renderModal({ isOpen: true, style: { overlay: { position: 'static' } } });
+ expect(modal.portal.overlay.style.position).toEqual('static');
+ unmountModal();
});
- it('supports overriding the default styles', function() {
- var previousStyle = Modal.defaultStyles.content.position
- //Just in case the default style is already relative, check that we can change it
- var newStyle = previousStyle === 'relative' ? 'static': 'relative'
- Modal.defaultStyles.content.position = newStyle
- var modal = renderModal({isOpen: true});
- expect(modal.portal.refs.content.style.position).toEqual(newStyle);
- Modal.defaultStyles.content.position = previousStyle
+ it('supports overriding the default styles', () => {
+ const previousStyle = Modal.defaultStyles.content.position;
+ // Just in case the default style is already relative, check that we can change it
+ const newStyle = previousStyle === 'relative' ? 'static' : 'relative';
+ Modal.defaultStyles.content.position = newStyle;
+ const modal = renderModal({ isOpen: true });
+ expect(modal.portal.content.style.position).toEqual(newStyle);
+ Modal.defaultStyles.content.position = previousStyle;
+ unmountModal();
});
- it('adds class to body when open', function() {
- renderModal({isOpen: false});
- expect(document.body.className.indexOf('ReactModal__Body--open') !== -1).toEqual(false);
- renderModal({isOpen: true});
- expect(document.body.className.indexOf('ReactModal__Body--open') !== -1).toEqual(true);
+ it('should remove class from body when no modals opened', () => {
+ renderModal({ isOpen: true });
+ renderModal({ isOpen: true });
+ expect(document.body.className.indexOf('ReactModal__Body--open') > -1).toBe(true);
+ unmountModal();
+ expect(document.body.className.indexOf('ReactModal__Body--open') > -1).toBe(true);
+ unmountModal();
+ expect(document.body.className.indexOf('ReactModal__Body--open') === -1).toBe(true);
+ });
- renderModal({isOpen: false});
- expect(document.body.className.indexOf('ReactModal__Body--open') !== -1).toEqual(false);
+ it('adds class to body when open', () => {
+ renderModal({ isOpen: false });
+ expect(document.body.className.indexOf('ReactModal__Body--open') !== -1).toEqual(false);
+ unmountModal();
+ renderModal({ isOpen: true });
+ expect(document.body.className.indexOf('ReactModal__Body--open') > -1).toEqual(true);
+ unmountModal();
+ renderModal({ isOpen: false });
+ expect(document.body.className.indexOf('ReactModal__Body--open') !== -1).toEqual(false);
unmountModal();
});
- it('removes class from body when unmounted without closing', function() {
- renderModal({isOpen: true});
- expect(document.body.className.indexOf('ReactModal__Body--open') !== -1).toEqual(true);
+ it('removes class from body when unmounted without closing', () => {
+ renderModal({ isOpen: true });
+ expect(document.body.className.indexOf('ReactModal__Body--open') !== -1).toEqual(true);
unmountModal();
- expect(document.body.className.indexOf('ReactModal__Body--open') !== -1).toEqual(false);
+ expect(document.body.className.indexOf('ReactModal__Body--open') !== -1).toEqual(false);
});
- it('removes aria-hidden from appElement when unmounted without closing', function() {
- var el = document.createElement('div');
- var node = document.createElement('div');
+ it('removes aria-hidden from appElement when unmounted without closing', () => {
+ const el = document.createElement('div');
+ const node = document.createElement('div');
ReactDOM.render(React.createElement(Modal, {
isOpen: true,
appElement: el
@@ -234,20 +289,20 @@ describe('Modal', function () {
expect(el.getAttribute('aria-hidden')).toEqual(null);
});
- it('adds --after-open for animations', function() {
- renderModal({isOpen: true});
- var overlay = document.querySelector('.ReactModal__Overlay');
- var content = document.querySelector('.ReactModal__Content');
+ it('adds --after-open for animations', () => {
+ renderModal({ isOpen: true });
+ const overlay = document.querySelector('.ReactModal__Overlay');
+ const content = document.querySelector('.ReactModal__Content');
expect(overlay.className.match(/ReactModal__Overlay--after-open/)).toExist();
expect(content.className.match(/ReactModal__Content--after-open/)).toExist();
unmountModal();
});
- it('should trigger the onAfterOpen callback', function() {
- var afterOpenCallback = sinon.spy();
+ it('should trigger the onAfterOpen callback', () => {
+ const afterOpenCallback = sinon.spy();
renderModal({
isOpen: true,
- onAfterOpen: function() {
+ onAfterOpen () {
afterOpenCallback();
}
});
@@ -255,11 +310,11 @@ describe('Modal', function () {
unmountModal();
});
- it('check the state of the modal after close with time out and reopen it', function() {
- var modal = renderModal({
+ it('check the state of the modal after close with time out and reopen it', () => {
+ const modal = renderModal({
isOpen: true,
closeTimeoutMS: 2000,
- onRequestClose: function() {}
+ onRequestClose () {}
});
modal.portal.closeWithTimeout();
modal.portal.open();
@@ -268,67 +323,89 @@ describe('Modal', function () {
unmountModal();
});
- describe('should close on overlay click', function() {
- afterEach('Unmount modal', function() {
+ it('should close on Esc key event', () => {
+ const requestCloseCallback = sinon.spy();
+ const modal = renderModal({
+ isOpen: true,
+ shouldCloseOnOverlayClick: true,
+ onRequestClose: requestCloseCallback
+ });
+ expect(modal.props.isOpen).toEqual(true);
+ expect(() => {
+ Simulate.keyDown(modal.portal.content, {
+ // The keyCode is all that matters, so this works
+ key: 'FakeKeyToTestLater',
+ keyCode: 27,
+ which: 27
+ });
+ }).toNotThrow();
+ expect(requestCloseCallback.called).toBeTruthy();
+ // Check if event is passed to onRequestClose callback.
+ const event = requestCloseCallback.getCall(0).args[0];
+ expect(event).toBeTruthy();
+ expect(event.constructor).toBeTruthy();
+ expect(event.key).toEqual('FakeKeyToTestLater');
+ });
+
+ describe('should close on overlay click', () => {
+ afterEach('Unmount modal', () => {
unmountModal();
});
- describe('verify props', function() {
- it('verify default prop of shouldCloseOnOverlayClick', function () {
- var modal = renderModal({isOpen: true});
+ describe('verify props', () => {
+ it('verify default prop of shouldCloseOnOverlayClick', () => {
+ const modal = renderModal({ isOpen: true });
expect(modal.props.shouldCloseOnOverlayClick).toEqual(true);
});
- it('verify prop of shouldCloseOnOverlayClick', function () {
- var modal = renderModal({isOpen: true, shouldCloseOnOverlayClick: false});
+ it('verify prop of shouldCloseOnOverlayClick', () => {
+ const modal = renderModal({ isOpen: true, shouldCloseOnOverlayClick: false });
expect(modal.props.shouldCloseOnOverlayClick).toEqual(false);
});
});
- describe('verify clicks', function() {
- it('verify overlay click when shouldCloseOnOverlayClick sets to false', function () {
- var requestCloseCallback = sinon.spy();
- var modal = renderModal({
+ describe('verify clicks', () => {
+ it('verify overlay click when shouldCloseOnOverlayClick sets to false', () => {
+ const requestCloseCallback = sinon.spy();
+ const modal = renderModal({
isOpen: true,
shouldCloseOnOverlayClick: false
});
expect(modal.props.isOpen).toEqual(true);
- var overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
+ const overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
expect(overlay.length).toEqual(1);
- Simulate.mouseDown(overlay[0]); // click the overlay
- Simulate.mouseUp(overlay[0]);
+ Simulate.click(overlay[0]); // click the overlay
expect(!requestCloseCallback.called).toBeTruthy();
});
- it('verify overlay click when shouldCloseOnOverlayClick sets to true', function() {
- var requestCloseCallback = sinon.spy();
- var modal = renderModal({
+ it('verify overlay click when shouldCloseOnOverlayClick sets to true', () => {
+ const requestCloseCallback = sinon.spy();
+ const modal = renderModal({
isOpen: true,
shouldCloseOnOverlayClick: true,
- onRequestClose: function() {
+ onRequestClose () {
requestCloseCallback();
}
});
expect(modal.props.isOpen).toEqual(true);
- var overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
+ const overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
expect(overlay.length).toEqual(1);
- Simulate.mouseDown(overlay[0]); // click the overlay
- Simulate.mouseUp(overlay[0]);
+ Simulate.click(overlay[0]); // click the overlay
expect(requestCloseCallback.called).toBeTruthy();
});
- it('verify overlay mouse down and content mouse up when shouldCloseOnOverlayClick sets to true', function() {
- var requestCloseCallback = sinon.spy();
- var modal = renderModal({
- isOpen: true,
- shouldCloseOnOverlayClick: true,
- onRequestClose: function() {
- requestCloseCallback();
- }
- });
+ it('verify overlay mouse down and content mouse up when shouldCloseOnOverlayClick sets to true', () => {
+ const requestCloseCallback = sinon.spy();
+ const modal = renderModal({
+ isOpen: true,
+ shouldCloseOnOverlayClick: true,
+ onRequestClose () {
+ requestCloseCallback();
+ }
+ });
expect(modal.props.isOpen).toEqual(true);
- var overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
- var content = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Content');
+ const overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
+ const content = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Content');
expect(overlay.length).toEqual(1);
expect(content.length).toEqual(1);
Simulate.mouseDown(overlay[0]); // click the overlay
@@ -336,18 +413,18 @@ describe('Modal', function () {
expect(!requestCloseCallback.called).toBeTruthy();
});
- it('verify content mouse down and overlay mouse up when shouldCloseOnOverlayClick sets to true', function() {
- var requestCloseCallback = sinon.spy();
- var modal = renderModal({
- isOpen: true,
- shouldCloseOnOverlayClick: true,
- onRequestClose: function() {
- requestCloseCallback();
- }
- });
+ it('verify content mouse down and overlay mouse up when shouldCloseOnOverlayClick sets to true', () => {
+ const requestCloseCallback = sinon.spy();
+ const modal = renderModal({
+ isOpen: true,
+ shouldCloseOnOverlayClick: true,
+ onRequestClose () {
+ requestCloseCallback();
+ }
+ });
expect(modal.props.isOpen).toEqual(true);
- var overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
- var content = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Content');
+ const overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
+ const content = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Content');
expect(content.length).toEqual(1);
expect(overlay.length).toEqual(1);
Simulate.mouseDown(content[0]); // click the overlay
@@ -355,79 +432,71 @@ describe('Modal', function () {
expect(!requestCloseCallback.called).toBeTruthy();
});
- it('should not stop event propagation', function() {
- var hasPropagated = false
- var modal = renderModal({
+ it('should not stop event propagation', () => {
+ let hasPropagated = false;
+ const modal = renderModal({
isOpen: true,
shouldCloseOnOverlayClick: true
});
- var overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
- window.addEventListener('click', function () { hasPropagated = true })
- overlay[0].dispatchEvent(new MouseEvent('click', { bubbles: true }))
+ const overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
+ window.addEventListener('click', () => { hasPropagated = true; });
+ // Work around for running the spec in IE 11
+ let mouseEvent = null;
+ try {
+ mouseEvent = new MouseEvent('click', { bubbles: true });
+ } catch (err) {
+ mouseEvent = document.createEvent('MouseEvent');
+ mouseEvent.initEvent('click', true, false);
+ }
+ overlay[0].dispatchEvent(mouseEvent);
expect(hasPropagated).toBeTruthy();
});
});
- it('verify event passing on overlay click', function() {
- var requestCloseCallback = sinon.spy();
- var modal = renderModal({
+ it('verify event passing on overlay click', () => {
+ const requestCloseCallback = sinon.spy();
+ const modal = renderModal({
isOpen: true,
shouldCloseOnOverlayClick: true,
onRequestClose: requestCloseCallback
});
expect(modal.props.isOpen).toEqual(true);
- var overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
+ const overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
expect(overlay.length).toEqual(1);
- Simulate.mouseDown(overlay[0]); // click the overlay
- Simulate.mouseUp(overlay[0]);
+ // click the overlay
+ Simulate.click(overlay[0], {
+ // Used to test that this was the event received
+ fakeData: 'ABC'
+ });
expect(requestCloseCallback.called).toBeTruthy();
// Check if event is passed to onRequestClose callback.
- var event = requestCloseCallback.getCall(0).args[0];
+ const event = requestCloseCallback.getCall(0).args[0];
expect(event).toBeTruthy();
expect(event.constructor).toBeTruthy();
- expect(event.constructor.name).toEqual('SyntheticEvent');
- });
- });
-
- it('should close on Esc key event', function() {
- var requestCloseCallback = sinon.spy();
- var modal = renderModal({
- isOpen: true,
- shouldCloseOnOverlayClick: true,
- onRequestClose: requestCloseCallback
+ expect(event.fakeData).toEqual('ABC');
});
- expect(modal.props.isOpen).toEqual(true);
- expect(function() {
- Simulate.keyDown(modal.portal.refs.content, {key: "Esc", keyCode: 27, which: 27})
- }).toNotThrow();
- expect(requestCloseCallback.called).toBeTruthy();
- // Check if event is passed to onRequestClose callback.
- var event = requestCloseCallback.getCall(0).args[0];
- expect(event).toBeTruthy();
- expect(event.constructor).toBeTruthy();
- expect(event.constructor.name).toEqual('SyntheticEvent');
});
- //it('adds --before-close for animations', function() {
- //var node = document.createElement('div');
+ // it('adds --before-close for animations', function() {
+ // var node = document.createElement('div');
- //var component = ReactDOM.render(React.createElement(Modal, {
- //isOpen: true,
- //ariaHideApp: false,
- //closeTimeoutMS: 50,
- //}), node);
+ // var component = ReactDOM.render(React.createElement(Modal, {
+ // isOpen: true,
+ // ariaHideApp: false,
+ // closeTimeoutMS: 50,
+ // }), node);
- //component = ReactDOM.render(React.createElement(Modal, {
- //isOpen: false,
- //ariaHideApp: false,
- //closeTimeoutMS: 50,
- //}), node);
+ // component = ReactDOM.render(React.createElement(Modal, {
+ // isOpen: false,
+ // ariaHideApp: false,
+ // closeTimeoutMS: 50,
+ // }), node);
// It can't find these nodes, I didn't spend much time on this
- //var overlay = document.querySelector('.ReactModal__Overlay');
- //var content = document.querySelector('.ReactModal__Content');
- //ok(overlay.className.match(/ReactModal__Overlay--before-close/));
- //ok(content.className.match(/ReactModal__Content--before-close/));
- //unmountModal();
- //});
+ // var overlay = document.querySelector('.ReactModal__Overlay');
+ // var content = document.querySelector('.ReactModal__Content');
+ // ok(overlay.className.match(/ReactModal__Overlay--before-close/));
+ // ok(content.className.match(/ReactModal__Content--before-close/));
+ // unmountModal();
+ // });
});
diff --git a/specs/helper.js b/specs/helper.js
index a53709ae..0e1fee84 100644
--- a/specs/helper.js
+++ b/specs/helper.js
@@ -1,20 +1,27 @@
+// The following eslint overrides should be removed when refactoring can occur
+
+/* eslint react/no-render-return-value: "warn" */
import React from 'react';
import ReactDOM from 'react-dom';
import Modal from '../lib/components/Modal';
-let _currentDiv = null;
+const divStack = [];
-export const renderModal = function(props, children, callback) {
- props.ariaHideApp = false;
- _currentDiv = document.createElement('div');
- document.body.appendChild(_currentDiv);
+export function renderModal (props, children, callback) {
+ const myProps = {
+ ariaHideApp: false,
+ ...props
+ };
+ const currentDiv = document.createElement('div');
+ divStack.push(currentDiv);
+ document.body.appendChild(currentDiv);
return ReactDOM.render(
- {children}
- , _currentDiv, callback);
-};
+ {children}
+ , currentDiv, callback);
+}
-export const unmountModal = function() {
- ReactDOM.unmountComponentAtNode(_currentDiv);
- document.body.removeChild(_currentDiv);
- _currentDiv = null;
+export const unmountModal = () => {
+ const currentDiv = divStack.pop();
+ ReactDOM.unmountComponentAtNode(currentDiv);
+ document.body.removeChild(currentDiv);
};
diff --git a/specs/spec_index.js b/specs/spec_index.js
index bfd7c264..363463c4 100644
--- a/specs/spec_index.js
+++ b/specs/spec_index.js
@@ -1,10 +1,19 @@
const testsContext = require.context('.', true, /spec$/);
-testsContext.keys().forEach(function(path) {
- try {
- testsContext(path);
- } catch(err) {
- debugger
- console.error(`[ERROR] WITH SPEC FILE: ${path}`);
- console.error(err);
- }
+testsContext.keys().forEach((path) => {
+ try {
+ testsContext(path);
+ } catch (err) {
+ console.error(`[ERROR] WITH SPEC FILE: ${path}`);
+ console.error(err);
+ }
+});
+
+const componentsContext = require.context('../lib', true, /\.js$/);
+componentsContext.keys().forEach((path) => {
+ try {
+ componentsContext(path);
+ } catch (err) {
+ console.error(`[ERROR] WITH LIB FILE: ${path}`);
+ console.error(err);
+ }
});
diff --git a/webpack.test.config.js b/webpack.test.config.js
index 6fd71d36..6a416857 100644
--- a/webpack.test.config.js
+++ b/webpack.test.config.js
@@ -1,7 +1,19 @@
-var commonConfig = require('./webpack.config');
+const path = require('path');
+const commonConfig = require('./webpack.config');
+
commonConfig.plugins = [];
commonConfig.entry = undefined;
commonConfig.debug = true;
+commonConfig.devtool = 'inline-source-map';
+
+if (process.env.CONTINUOUS_INTEGRATION || process.env.COVERAGE) {
+ commonConfig.module.postLoaders = commonConfig.module.postLoaders || []
+ commonConfig.module.postLoaders.push({
+ test: /\.js$/,
+ include: path.resolve('lib'),
+ loader: 'istanbul-instrumenter'
+ });
+}
module.exports = commonConfig;
diff --git a/yarn.lock b/yarn.lock
index 8356e784..e768ca90 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,7 +2,7 @@
# yarn lockfile v1
-abbrev@1, abbrev@~1.0.7, abbrev@~1.0.9:
+abbrev@1, abbrev@1.0.x, abbrev@~1.0.7, abbrev@~1.0.9:
version "1.0.9"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
@@ -20,10 +20,24 @@ accepts@~1.3.3:
mime-types "~2.1.11"
negotiator "0.6.1"
-acorn@^3.0.0, acorn@^3.1.0:
+acorn-jsx@^3.0.0, acorn-jsx@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+ dependencies:
+ acorn "^3.0.4"
+
+acorn@^3.0.0, acorn@^3.0.4, acorn@^3.1.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+acorn@^4.0.1:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a"
+
+adm-zip@~0.4.3:
+ version "0.4.7"
+ resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1"
+
after@0.8.1:
version "0.8.1"
resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627"
@@ -32,6 +46,24 @@ after@0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
+agent-base@2:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e"
+ dependencies:
+ extend "~3.0.0"
+ semver "~5.0.1"
+
+ajv-keywords@^1.0.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.0.tgz#c11e6859eafff83e0dafc416929472eca946aa2c"
+
+ajv@^4.7.0:
+ version "4.10.3"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.10.3.tgz#3e4fea9675b157de7888b80dd0ed735b83f28e11"
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
align-text@^0.1.1, align-text@^0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
@@ -44,7 +76,11 @@ amdefine@>=0.0.4:
version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-ansi-regex@*, ansi-regex@^2.0.0:
+ansi-escapes@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+
+ansi-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
@@ -75,6 +111,30 @@ aproba@^1.0.3, aproba@~1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
+archiver-utils@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-1.3.0.tgz#e50b4c09c70bf3d680e32ff1b7994e9f9d895174"
+ dependencies:
+ glob "^7.0.0"
+ graceful-fs "^4.1.0"
+ lazystream "^1.0.0"
+ lodash "^4.8.0"
+ normalize-path "^2.0.0"
+ readable-stream "^2.0.0"
+
+archiver@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/archiver/-/archiver-1.1.0.tgz#e1e8c4d356cf155308f351d60cc18cb6fb2344ee"
+ dependencies:
+ archiver-utils "^1.3.0"
+ async "^2.0.0"
+ buffer-crc32 "^0.2.1"
+ glob "^7.0.0"
+ lodash "^4.8.0"
+ readable-stream "^2.0.0"
+ tar-stream "^1.5.0"
+ zip-stream "^1.1.0"
+
archy@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
@@ -86,6 +146,12 @@ are-we-there-yet@~1.1.2:
delegates "^1.0.0"
readable-stream "^2.0.0 || ^1.1.13"
+argparse@^1.0.7:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+ dependencies:
+ sprintf-js "~1.0.2"
+
arr-diff@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
@@ -100,6 +166,10 @@ array-filter@~0.0.0:
version "0.0.1"
resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
@@ -123,6 +193,16 @@ array-slice@^0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+
array-unique@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
@@ -175,15 +255,25 @@ async@0.1.x:
version "0.1.22"
resolved "https://registry.yarnpkg.com/async/-/async-0.1.22.tgz#0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061"
-async@^0.9.0, async@~0.9.0:
- version "0.9.2"
- resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+async@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.4.0.tgz#35f86f83c59e0421d099cd9a91d8278fb578c00d"
-async@^1.3.0:
+async@1.x, async@^1.3.0, async@^1.4.0, async@~1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
-async@^2.0.1:
+async@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.0.1.tgz#b709cc0280a9c36f09f4536be823c838a9049e25"
+ dependencies:
+ lodash "^4.8.0"
+
+async@^0.9.0, async@~0.9.0:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+
+async@^2.0.0, async@^2.0.1:
version "2.1.4"
resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4"
dependencies:
@@ -205,7 +295,7 @@ aws4@^1.2.1:
version "1.5.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
-babel-code-frame@^6.20.0:
+babel-code-frame@^6.16.0, babel-code-frame@^6.20.0:
version "6.20.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26"
dependencies:
@@ -237,6 +327,16 @@ babel-core@^6.18.0, babel-core@^6.7.4:
slash "^1.0.0"
source-map "^0.5.0"
+babel-eslint@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.1.1.tgz#8a6a884f085aa7060af69cfc77341c2f99370fb2"
+ dependencies:
+ babel-code-frame "^6.16.0"
+ babel-traverse "^6.15.0"
+ babel-types "^6.15.0"
+ babylon "^6.13.0"
+ lodash.pickby "^4.6.0"
+
babel-generator@^6.21.0:
version "6.21.0"
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.21.0.tgz#605f1269c489a1c75deeca7ea16d43d4656c8494"
@@ -249,6 +349,22 @@ babel-generator@^6.21.0:
lodash "^4.2.0"
source-map "^0.5.0"
+babel-helper-bindify-decorators@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.18.0.tgz#fc00c573676a6e702fffa00019580892ec8780a5"
+ dependencies:
+ babel-runtime "^6.0.0"
+ babel-traverse "^6.18.0"
+ babel-types "^6.18.0"
+
+babel-helper-builder-binary-assignment-operator-visitor@^6.8.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.18.0.tgz#8ae814989f7a53682152e3401a04fabd0bb333a6"
+ dependencies:
+ babel-helper-explode-assignable-expression "^6.18.0"
+ babel-runtime "^6.0.0"
+ babel-types "^6.18.0"
+
babel-helper-builder-react-jsx@^6.8.0:
version "6.21.1"
resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.21.1.tgz#c4a24208655be9dc1cccf14d366da176f20645e4"
@@ -276,6 +392,23 @@ babel-helper-define-map@^6.18.0, babel-helper-define-map@^6.8.0:
babel-types "^6.18.0"
lodash "^4.2.0"
+babel-helper-explode-assignable-expression@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.18.0.tgz#14b8e8c2d03ad735d4b20f1840b24cd1f65239fe"
+ dependencies:
+ babel-runtime "^6.0.0"
+ babel-traverse "^6.18.0"
+ babel-types "^6.18.0"
+
+babel-helper-explode-class@^6.8.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.18.0.tgz#c44f76f4fa23b9c5d607cbac5d4115e7a76f62cb"
+ dependencies:
+ babel-helper-bindify-decorators "^6.18.0"
+ babel-runtime "^6.0.0"
+ babel-traverse "^6.18.0"
+ babel-types "^6.18.0"
+
babel-helper-function-name@^6.18.0, babel-helper-function-name@^6.8.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz#68ec71aeba1f3e28b2a6f0730190b754a9bf30e6"
@@ -315,6 +448,16 @@ babel-helper-regex@^6.8.0:
babel-types "^6.18.0"
lodash "^4.2.0"
+babel-helper-remap-async-to-generator@^6.16.0, babel-helper-remap-async-to-generator@^6.16.2:
+ version "6.20.3"
+ resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.20.3.tgz#9dd3b396f13e35ef63e538098500adc24c63c4e7"
+ dependencies:
+ babel-helper-function-name "^6.18.0"
+ babel-runtime "^6.20.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.20.0"
+ babel-types "^6.20.0"
+
babel-helper-replace-supers@^6.18.0, babel-helper-replace-supers@^6.8.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz#28ec69877be4144dbd64f4cc3a337e89f29a924e"
@@ -354,6 +497,30 @@ babel-plugin-check-es2015-constants@^6.3.13:
dependencies:
babel-runtime "^6.0.0"
+babel-plugin-syntax-async-functions@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
+
+babel-plugin-syntax-async-generators@^6.5.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a"
+
+babel-plugin-syntax-class-properties@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
+
+babel-plugin-syntax-decorators@^6.13.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b"
+
+babel-plugin-syntax-dynamic-import@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
+
+babel-plugin-syntax-exponentiation-operator@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
+
babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
@@ -362,6 +529,50 @@ babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+babel-plugin-syntax-object-rest-spread@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+
+babel-plugin-syntax-trailing-function-commas@^6.3.13, babel-plugin-syntax-trailing-function-commas@^6.8.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.20.0.tgz#442835e19179f45b87e92d477d70b9f1f18b5c4f"
+
+babel-plugin-transform-async-generator-functions@^6.17.0:
+ version "6.17.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.17.0.tgz#d0b5a2b2f0940f2b245fa20a00519ed7bc6cae54"
+ dependencies:
+ babel-helper-remap-async-to-generator "^6.16.2"
+ babel-plugin-syntax-async-generators "^6.5.0"
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-async-to-generator@^6.16.0:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999"
+ dependencies:
+ babel-helper-remap-async-to-generator "^6.16.0"
+ babel-plugin-syntax-async-functions "^6.8.0"
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-class-properties@^6.18.0:
+ version "6.19.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.19.0.tgz#1274b349abaadc835164e2004f4a2444a2788d5f"
+ dependencies:
+ babel-helper-function-name "^6.18.0"
+ babel-plugin-syntax-class-properties "^6.8.0"
+ babel-runtime "^6.9.1"
+ babel-template "^6.15.0"
+
+babel-plugin-transform-decorators@^6.13.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.13.0.tgz#82d65c1470ae83e2d13eebecb0a1c2476d62da9d"
+ dependencies:
+ babel-helper-define-map "^6.8.0"
+ babel-helper-explode-class "^6.8.0"
+ babel-plugin-syntax-decorators "^6.13.0"
+ babel-runtime "^6.0.0"
+ babel-template "^6.8.0"
+ babel-types "^6.13.0"
+
babel-plugin-transform-es2015-arrow-functions@^6.3.13:
version "6.8.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz#5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d"
@@ -531,6 +742,14 @@ babel-plugin-transform-es2015-unicode-regex@^6.3.13:
babel-runtime "^6.0.0"
regexpu-core "^2.0.0"
+babel-plugin-transform-exponentiation-operator@^6.3.13:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.8.0.tgz#db25742e9339eade676ca9acec46f955599a68a4"
+ dependencies:
+ babel-helper-builder-binary-assignment-operator-visitor "^6.8.0"
+ babel-plugin-syntax-exponentiation-operator "^6.8.0"
+ babel-runtime "^6.0.0"
+
babel-plugin-transform-flow-strip-types@^6.3.13:
version "6.21.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.21.0.tgz#2eea3f8b5bb234339b47283feac155cfb237b948"
@@ -538,6 +757,13 @@ babel-plugin-transform-flow-strip-types@^6.3.13:
babel-plugin-syntax-flow "^6.18.0"
babel-runtime "^6.0.0"
+babel-plugin-transform-object-rest-spread@^6.16.0:
+ version "6.20.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.20.2.tgz#e816c55bba77b14c16365d87e2ae48c8fd18fc2e"
+ dependencies:
+ babel-plugin-syntax-object-rest-spread "^6.8.0"
+ babel-runtime "^6.20.0"
+
babel-plugin-transform-react-display-name@^6.3.13:
version "6.8.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.8.0.tgz#f7a084977383d728bdbdc2835bba0159577f660e"
@@ -579,7 +805,7 @@ babel-plugin-transform-strict-mode@^6.18.0:
babel-runtime "^6.0.0"
babel-types "^6.18.0"
-babel-preset-es2015@^6.6.0:
+babel-preset-es2015@^6.16.0, babel-preset-es2015@^6.6.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.18.0.tgz#b8c70df84ec948c43dcf2bf770e988eb7da88312"
dependencies:
@@ -608,6 +834,27 @@ babel-preset-es2015@^6.6.0:
babel-plugin-transform-es2015-unicode-regex "^6.3.13"
babel-plugin-transform-regenerator "^6.16.0"
+babel-preset-es2016@^6.16.0:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-es2016/-/babel-preset-es2016-6.16.0.tgz#c7daf5feedeee99c867813bdf0d573d94ca12812"
+ dependencies:
+ babel-plugin-transform-exponentiation-operator "^6.3.13"
+
+babel-preset-es2017@^6.16.0:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-es2017/-/babel-preset-es2017-6.16.0.tgz#536c6287778a758948ddd092b466b6ef50b786fa"
+ dependencies:
+ babel-plugin-syntax-trailing-function-commas "^6.8.0"
+ babel-plugin-transform-async-to-generator "^6.16.0"
+
+babel-preset-latest@^6.16.0:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-latest/-/babel-preset-latest-6.16.0.tgz#5b87e19e250bb1213f13af4ec9dc7a51d53f388d"
+ dependencies:
+ babel-preset-es2015 "^6.16.0"
+ babel-preset-es2016 "^6.16.0"
+ babel-preset-es2017 "^6.16.0"
+
babel-preset-react@^6.5.0:
version "6.16.0"
resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.16.0.tgz#aa117d60de0928607e343c4828906e4661824316"
@@ -620,6 +867,25 @@ babel-preset-react@^6.5.0:
babel-plugin-transform-react-jsx-self "^6.11.0"
babel-plugin-transform-react-jsx-source "^6.3.13"
+babel-preset-stage-2@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.18.0.tgz#9eb7bf9a8e91c68260d5ba7500493caaada4b5b5"
+ dependencies:
+ babel-plugin-syntax-dynamic-import "^6.18.0"
+ babel-plugin-transform-class-properties "^6.18.0"
+ babel-plugin-transform-decorators "^6.13.0"
+ babel-preset-stage-3 "^6.17.0"
+
+babel-preset-stage-3@^6.17.0:
+ version "6.17.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.17.0.tgz#b6638e46db6e91e3f889013d8ce143917c685e39"
+ dependencies:
+ babel-plugin-syntax-trailing-function-commas "^6.3.13"
+ babel-plugin-transform-async-generator-functions "^6.17.0"
+ babel-plugin-transform-async-to-generator "^6.16.0"
+ babel-plugin-transform-exponentiation-operator "^6.3.13"
+ babel-plugin-transform-object-rest-spread "^6.16.0"
+
babel-register@^6.18.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68"
@@ -632,7 +898,7 @@ babel-register@^6.18.0:
mkdirp "^0.5.1"
source-map-support "^0.4.2"
-babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.9.0:
+babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.9.0, babel-runtime@^6.9.1:
version "6.20.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f"
dependencies:
@@ -649,7 +915,7 @@ babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-te
babylon "^6.11.0"
lodash "^4.2.0"
-babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.21.0:
+babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.20.0, babel-traverse@^6.21.0:
version "6.21.0"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.21.0.tgz#69c6365804f1a4f69eb1213f85b00a818b8c21ad"
dependencies:
@@ -663,7 +929,7 @@ babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.21.0:
invariant "^2.2.0"
lodash "^4.2.0"
-babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.8.0, babel-types@^6.9.0:
+babel-types@^6.13.0, babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.20.0, babel-types@^6.21.0, babel-types@^6.8.0, babel-types@^6.9.0:
version "6.21.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.21.0.tgz#314b92168891ef6d3806b7f7a917fdf87c11a4b2"
dependencies:
@@ -672,7 +938,7 @@ babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21
lodash "^4.2.0"
to-fast-properties "^1.0.1"
-babylon@^6.11.0:
+babylon@^6.11.0, babylon@^6.13.0:
version "6.14.1"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815"
@@ -736,15 +1002,15 @@ binary-extensions@^1.0.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
-bl@~1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/bl/-/bl-1.0.3.tgz#fc5421a28fd4226036c3b3891a66a25bc64d226e"
+bl@^1.0.0, bl@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398"
dependencies:
readable-stream "~2.0.5"
-bl@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398"
+bl@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.0.3.tgz#fc5421a28fd4226036c3b3891a66a25bc64d226e"
dependencies:
readable-stream "~2.0.5"
@@ -820,6 +1086,10 @@ browserify-zlib@^0.1.4:
dependencies:
pako "~0.2.0"
+buffer-crc32@^0.2.1:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+
buffer-shims@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
@@ -832,7 +1102,7 @@ buffer@^4.9.0:
ieee754 "^1.1.4"
isarray "^1.0.0"
-builtin-modules@^1.0.0:
+builtin-modules@^1.0.0, builtin-modules@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
@@ -848,14 +1118,35 @@ bytes@2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339"
+caller-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+ dependencies:
+ callsites "^0.2.0"
+
callsite@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+callsites@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
camelcase@^1.0.2:
version "1.2.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+
caseless@~0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
@@ -867,7 +1158,7 @@ center-align@^0.1.1:
align-text "^0.1.3"
lazy-cache "^1.0.3"
-chalk@1.1.3, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
+chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
dependencies:
@@ -904,6 +1195,10 @@ chownr@^1.0.1, chownr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
+circular-json@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d"
+
cli-color@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.2.3.tgz#0a25ceae5a6a1602be7f77d28563c36700274e88"
@@ -911,6 +1206,16 @@ cli-color@0.2.3:
es5-ext "~0.9.2"
memoizee "~0.2.5"
+cli-cursor@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+ dependencies:
+ restore-cursor "^1.0.1"
+
+cli-width@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
+
cliui@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
@@ -930,15 +1235,28 @@ cmd-shim@~2.0.2:
graceful-fs "^4.1.2"
mkdirp "~0.5.0"
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+codeclimate-test-reporter@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/codeclimate-test-reporter/-/codeclimate-test-reporter-0.4.0.tgz#b5ce10aeed7898016a1b2411acdfaba3c67c2c28"
+ dependencies:
+ async "~1.5.2"
+ commander "2.9.0"
+ lcov-parse "0.0.10"
+ request "~2.74.0"
+
colors@0.x.x:
version "0.6.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc"
-colors@^1.1.0:
+colors@^1.1.0, colors@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
@@ -1009,6 +1327,15 @@ component-inherit@0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+compress-commons@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-1.1.0.tgz#9f4460bb1288564c7473916e0298aa3c320dcadb"
+ dependencies:
+ buffer-crc32 "^0.2.1"
+ crc32-stream "^1.0.0"
+ normalize-path "^2.0.0"
+ readable-stream "^2.0.0"
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -1055,6 +1382,10 @@ constants-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+
content-disposition@0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b"
@@ -1087,6 +1418,23 @@ core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+coveralls@^2.11.15:
+ version "2.11.15"
+ resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.15.tgz#37d3474369d66c14f33fa73a9d25cee6e099fca0"
+ dependencies:
+ js-yaml "3.6.1"
+ lcov-parse "0.0.10"
+ log-driver "1.2.5"
+ minimist "1.2.0"
+ request "2.75.0"
+
+crc32-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-1.0.0.tgz#ea155e5e1d738ed3778438ffe92ffe2a141aeb3f"
+ dependencies:
+ buffer-crc32 "^0.2.1"
+ readable-stream "^2.0.0"
+
cross-spawn@^4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
@@ -1109,6 +1457,12 @@ crypto-browserify@3.3.0:
ripemd160 "0.2.0"
sha.js "2.2.6"
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ dependencies:
+ array-find-index "^1.0.1"
+
custom-event@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
@@ -1123,6 +1477,10 @@ d@^0.1.1, d@~0.1.1:
dependencies:
es5-ext "~0.10.2"
+damerau-levenshtein@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.3.tgz#ae4f4ce0b62acae10ff63a01bb08f652f5213af2"
+
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
@@ -1133,10 +1491,23 @@ date-now@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+dateformat@^1.0.6:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
+ dependencies:
+ get-stdin "^4.0.1"
+ meow "^3.3.0"
+
debug@0.7.4:
version "0.7.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
+debug@2, debug@^2.1.1, debug@^2.2.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
+ dependencies:
+ ms "0.7.2"
+
debug@2.2.0, debug@~2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
@@ -1149,21 +1520,15 @@ debug@2.3.3:
dependencies:
ms "0.7.2"
-debug@^2.1.1, debug@^2.2.0:
- version "2.5.2"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.5.2.tgz#50c295a53dbf1657146e0c1b21307275e90d49cb"
- dependencies:
- ms "0.7.2"
-
-debuglog@*, debuglog@^1.0.1:
+debuglog@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
-decamelize@^1.0.0:
+decamelize@^1.0.0, decamelize@^1.1.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-deep-equal@*:
+deep-equal@*, deep-equal@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
@@ -1171,13 +1536,17 @@ deep-extend@~0.4.0:
version "0.4.1"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+
defaults@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
dependencies:
clone "^1.0.2"
-define-properties@^1.1.2, define-properties@~1.1.2:
+define-properties@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
dependencies:
@@ -1188,6 +1557,18 @@ defined@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+del@^2.0.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
+ dependencies:
+ globby "^5.0.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ rimraf "^2.2.8"
+
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -1232,6 +1613,17 @@ diff@1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
+diff@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
+
+doctrine@1.5.0, doctrine@^1.2.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
dom-serialize@^2.2.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b"
@@ -1281,6 +1673,12 @@ encoding@^0.1.11:
dependencies:
iconv-lite "~0.4.13"
+end-of-stream@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07"
+ dependencies:
+ once "~1.3.0"
+
engine.io-client@1.6.9:
version "1.6.9"
resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.6.9.tgz#1d6ad48048a5083c95096943b29d36efdb212401"
@@ -1378,7 +1776,7 @@ error-ex@^1.2.0:
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.4.3, es-abstract@^1.6.1:
+es-abstract@^1.4.3:
version "1.6.1"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.6.1.tgz#bb8a2064120abcf928a086ea3d9043114285ec99"
dependencies:
@@ -1395,7 +1793,7 @@ es-to-primitive@^1.1.1:
is-date-object "^1.0.1"
is-symbol "^1.0.1"
-es5-ext@^0.10.7, es5-ext@~0.10.11, es5-ext@~0.10.2:
+es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7:
version "0.10.12"
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047"
dependencies:
@@ -1414,29 +1812,203 @@ es6-iterator@2:
es5-ext "^0.10.7"
es6-symbol "3"
-es6-symbol@3, es6-symbol@^3.0.2, es6-symbol@~3.1:
+es6-map@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897"
+ dependencies:
+ d "~0.1.1"
+ es5-ext "~0.10.11"
+ es6-iterator "2"
+ es6-set "~0.1.3"
+ es6-symbol "~3.1.0"
+ event-emitter "~0.3.4"
+
+es6-set@~0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8"
+ dependencies:
+ d "~0.1.1"
+ es5-ext "~0.10.11"
+ es6-iterator "2"
+ es6-symbol "3"
+ event-emitter "~0.3.4"
+
+es6-symbol@3, es6-symbol@^3.0.2, es6-symbol@~3.1, es6-symbol@~3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa"
dependencies:
d "~0.1.1"
es5-ext "~0.10.11"
+es6-weak-map@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81"
+ dependencies:
+ d "^0.1.1"
+ es5-ext "^0.10.8"
+ es6-iterator "2"
+ es6-symbol "3"
+
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
-escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2:
+escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+escodegen@1.8.x:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
+ dependencies:
+ esprima "^2.7.1"
+ estraverse "^1.9.1"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.2.0"
+
+escope@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+ dependencies:
+ es6-map "^0.1.3"
+ es6-weak-map "^2.0.1"
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-config-airbnb-base@^10.0.0:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-10.0.1.tgz#f17d4e52992c1d45d1b7713efbcd5ecd0e7e0506"
+
+eslint-config-airbnb@latest:
+ version "13.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-13.0.0.tgz#688d15d3c276c0c753ae538c92a44397d76ae46e"
+ dependencies:
+ eslint-config-airbnb-base "^10.0.0"
+
+eslint-import-resolver-node@^0.2.0:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c"
+ dependencies:
+ debug "^2.2.0"
+ object-assign "^4.0.1"
+ resolve "^1.1.6"
+
+eslint-module-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce"
+ dependencies:
+ debug "2.2.0"
+ pkg-dir "^1.0.0"
+
+eslint-plugin-import@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e"
+ dependencies:
+ builtin-modules "^1.1.1"
+ contains-path "^0.1.0"
+ debug "^2.2.0"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.2.0"
+ eslint-module-utils "^2.0.0"
+ has "^1.0.1"
+ lodash.cond "^4.3.0"
+ minimatch "^3.0.3"
+ pkg-up "^1.0.0"
+
+eslint-plugin-jsx-a11y@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-2.2.3.tgz#4e35cb71b8a7db702ac415c806eb8e8d9ea6c65d"
+ dependencies:
+ damerau-levenshtein "^1.0.0"
+ jsx-ast-utils "^1.0.0"
+ object-assign "^4.0.1"
+
+eslint-plugin-react@^6.6.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.8.0.tgz#741ab5438a094532e5ce1bbb935d6832356f492d"
+ dependencies:
+ doctrine "^1.2.2"
+ jsx-ast-utils "^1.3.4"
+
+eslint@^3.9.1:
+ version "3.12.2"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.12.2.tgz#6be5a9aa29658252abd7f91e9132bab1f26f3c34"
+ dependencies:
+ babel-code-frame "^6.16.0"
+ chalk "^1.1.3"
+ concat-stream "^1.4.6"
+ debug "^2.1.1"
+ doctrine "^1.2.2"
+ escope "^3.6.0"
+ espree "^3.3.1"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^2.0.0"
+ glob "^7.0.3"
+ globals "^9.14.0"
+ ignore "^3.2.0"
+ imurmurhash "^0.1.4"
+ inquirer "^0.12.0"
+ is-my-json-valid "^2.10.0"
+ is-resolvable "^1.0.0"
+ js-yaml "^3.5.1"
+ json-stable-stringify "^1.0.0"
+ levn "^0.3.0"
+ lodash "^4.0.0"
+ mkdirp "^0.5.0"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.1"
+ pluralize "^1.2.1"
+ progress "^1.1.8"
+ require-uncached "^1.0.2"
+ shelljs "^0.7.5"
+ strip-bom "^3.0.0"
+ strip-json-comments "~1.0.1"
+ table "^3.7.8"
+ text-table "~0.2.0"
+ user-home "^2.0.0"
+
+espree@^3.3.1:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-3.3.2.tgz#dbf3fadeb4ecb4d4778303e50103b3d36c88b89c"
+ dependencies:
+ acorn "^4.0.1"
+ acorn-jsx "^3.0.0"
+
esprima-fb@^15001.1.0-dev-harmony-fb:
version "15001.1.0-dev-harmony-fb"
resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901"
+esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+
esprima@~3.1.0:
version "3.1.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+esrecurse@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220"
+ dependencies:
+ estraverse "~4.1.0"
+ object-assign "^4.0.1"
+
+estraverse@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
+
+estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+
+estraverse@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2"
+
esutils@^2.0.0, esutils@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
@@ -1451,6 +2023,13 @@ event-emitter@~0.2.2:
dependencies:
es5-ext "~0.9.2"
+event-emitter@~0.3.4:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5"
+ dependencies:
+ d "~0.1.1"
+ es5-ext "~0.10.7"
+
event-stream@~3.3.0:
version "3.3.4"
resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
@@ -1475,6 +2054,10 @@ exenv@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.0.tgz#3835f127abf075bfe082d0aed4484057c78e3c89"
+exit-hook@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+
expand-braces@^0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea"
@@ -1502,17 +2085,13 @@ expand-range@^1.8.1:
dependencies:
fill-range "^2.1.0"
-expect@^1.20.2:
- version "1.20.2"
- resolved "https://registry.yarnpkg.com/expect/-/expect-1.20.2.tgz#d458fe4c56004036bae3232416a3f6361f04f965"
+expect@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-1.10.0.tgz#d69fe0afe369cb096682a8ca2684eb7363681e07"
dependencies:
- define-properties "~1.1.2"
- has "^1.0.1"
- is-equal "^1.5.1"
- is-regex "^1.0.3"
- object-inspect "^1.1.0"
- object-keys "^1.0.9"
- tmatch "^2.0.1"
+ deep-equal "^1.0.1"
+ is-regexp "^1.0.0"
+ object-inspect "^1.0.2"
express@^4.13.3:
version "4.14.0"
@@ -1545,7 +2124,7 @@ express@^4.13.3:
utils-merge "1.0.0"
vary "~1.1.0"
-extend@^3.0.0, extend@~3.0.0:
+extend@3, extend@^3.0.0, extend@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
@@ -1563,6 +2142,10 @@ eyes@0.1.x:
version "0.1.8"
resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+
fbjs@^0.8.1, fbjs@^0.8.4:
version "0.8.8"
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.8.tgz#02f1b6e0ea0d46c24e0b51a2d24df069563a5ad6"
@@ -1575,6 +2158,20 @@ fbjs@^0.8.1, fbjs@^0.8.4:
setimmediate "^1.0.5"
ua-parser-js "^0.7.9"
+figures@^1.3.5:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+file-entry-cache@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
filename-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
@@ -1614,6 +2211,15 @@ find-up@^1.0.0:
path-exists "^2.0.0"
pinkie-promise "^2.0.0"
+flat-cache@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96"
+ dependencies:
+ circular-json "^0.3.1"
+ del "^2.0.2"
+ graceful-fs "^4.1.2"
+ write "^0.2.1"
+
for-in@^0.1.5:
version "0.1.6"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
@@ -1640,6 +2246,14 @@ form-data@~1.0.0-rc3, form-data@~1.0.0-rc4:
combined-stream "^1.0.5"
mime-types "^2.1.11"
+form-data@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.11"
+
form-data@~2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
@@ -1779,6 +2393,10 @@ generate-object-property@^1.1.0:
dependencies:
is-property "^1.0.0"
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+
getpass@^0.1.1:
version "0.1.6"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
@@ -1842,7 +2460,7 @@ glob@7.0.5, glob@~7.0.0:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^5.0.15:
+glob@^5.0.14, glob@^5.0.15:
version "5.0.15"
resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
dependencies:
@@ -1862,7 +2480,7 @@ glob@^6.0.0:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.0.3, glob@^7.0.5:
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5:
version "7.1.1"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
dependencies:
@@ -1884,11 +2502,22 @@ glob@~7.0.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
-globals@^9.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"
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.3, graceful-fs@~4.1.6:
+globby@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
+ dependencies:
+ array-union "^1.0.1"
+ arrify "^1.0.0"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+graceful-fs@^4.1.0, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.3, graceful-fs@~4.1.6:
version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
@@ -1900,6 +2529,16 @@ growl@1.9.2:
version "1.9.2"
resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
+handlebars@^4.0.1:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7"
+ dependencies:
+ async "^1.4.0"
+ optimist "^0.6.1"
+ source-map "^0.4.4"
+ optionalDependencies:
+ uglify-js "^2.6"
+
har-validator@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
@@ -1996,6 +2635,14 @@ https-browserify@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+https-proxy-agent@^1.0.0, https-proxy-agent@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6"
+ dependencies:
+ agent-base "2"
+ debug "2"
+ extend "3"
+
i@0.3.x:
version "0.3.5"
resolved "https://registry.yarnpkg.com/i/-/i-0.3.5.tgz#1d2b854158ec8169113c6cb7f6b6801e99e211d5"
@@ -2012,10 +2659,20 @@ iferr@^0.1.5, iferr@~0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
-imurmurhash@*, imurmurhash@^0.1.4:
+ignore@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435"
+
+imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ dependencies:
+ repeating "^2.0.0"
+
indexof@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
@@ -2052,10 +2709,32 @@ init-package-json@~1.9.3, init-package-json@~1.9.4:
validate-npm-package-license "^3.0.1"
validate-npm-package-name "^2.0.1"
+inquirer@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
+ dependencies:
+ ansi-escapes "^1.1.0"
+ ansi-regex "^2.0.0"
+ chalk "^1.0.0"
+ cli-cursor "^1.0.1"
+ cli-width "^2.0.0"
+ figures "^1.3.5"
+ lodash "^4.3.0"
+ readline2 "^1.0.1"
+ run-async "^0.1.0"
+ rx-lite "^3.1.2"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.0"
+ through "^2.3.6"
+
interpret@^0.6.4:
version "0.6.6"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"
+interpret@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c"
+
invariant@^2.2.0:
version "2.2.2"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
@@ -2070,22 +2749,12 @@ is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-is-arrow-function@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/is-arrow-function/-/is-arrow-function-2.0.3.tgz#29be2c2d8d9450852b8bbafb635ba7b8d8e87ec2"
- dependencies:
- is-callable "^1.0.4"
-
is-binary-path@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
dependencies:
binary-extensions "^1.0.0"
-is-boolean-object@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93"
-
is-buffer@^1.0.2:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
@@ -2096,7 +2765,7 @@ is-builtin-module@^1.0.0:
dependencies:
builtin-modules "^1.0.0"
-is-callable@^1.0.4, is-callable@^1.1.1, 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"
@@ -2114,22 +2783,6 @@ is-equal-shallow@^0.1.3:
dependencies:
is-primitive "^2.0.0"
-is-equal@^1.5.1:
- version "1.5.3"
- resolved "https://registry.yarnpkg.com/is-equal/-/is-equal-1.5.3.tgz#05b7fa3a1122cbc71c1ef41ce0142d5532013b29"
- dependencies:
- has "^1.0.1"
- is-arrow-function "^2.0.3"
- is-boolean-object "^1.0.0"
- is-callable "^1.1.3"
- is-date-object "^1.0.1"
- is-generator-function "^1.0.3"
- is-number-object "^1.0.3"
- is-regex "^1.0.3"
- is-string "^1.0.4"
- is-symbol "^1.0.1"
- object.entries "^1.0.3"
-
is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
@@ -2150,9 +2803,9 @@ is-fullwidth-code-point@^1.0.0:
dependencies:
number-is-nan "^1.0.0"
-is-generator-function@^1.0.3:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.6.tgz#9e71653cd15fff341c79c4151460a131d31e9fc4"
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
is-glob@^2.0.0, is-glob@^2.0.1:
version "2.0.1"
@@ -2160,7 +2813,7 @@ is-glob@^2.0.0, is-glob@^2.0.1:
dependencies:
is-extglob "^1.0.0"
-is-my-json-valid@^2.12.4:
+is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4:
version "2.15.0"
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
dependencies:
@@ -2169,10 +2822,6 @@ is-my-json-valid@^2.12.4:
jsonpointer "^4.0.0"
xtend "^4.0.0"
-is-number-object@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799"
-
is-number@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806"
@@ -2183,6 +2832,22 @@ is-number@^2.0.2, is-number@^2.1.0:
dependencies:
kind-of "^3.0.2"
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+
+is-path-in-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
+ dependencies:
+ is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
+ dependencies:
+ path-is-inside "^1.0.1"
+
is-posix-bracket@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
@@ -2199,14 +2864,20 @@ is-regex@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.3.tgz#0d55182bddf9f2fde278220aec3a75642c908637"
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+
+is-resolvable@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
+ dependencies:
+ tryit "^1.0.1"
+
is-stream@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
-is-string@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64"
-
is-symbol@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
@@ -2252,6 +2923,33 @@ isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+istanbul-instrumenter-loader@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-0.2.0.tgz#643e4e5e4e8f9466863a29a977d283ab372c019c"
+ dependencies:
+ istanbul "0.x.x"
+ loader-utils "0.x.x"
+ object-assign "4.x.x"
+
+istanbul@0.x.x, istanbul@^0.4.0:
+ version "0.4.5"
+ resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
+ dependencies:
+ abbrev "1.0.x"
+ async "1.x"
+ escodegen "1.8.x"
+ esprima "2.7.x"
+ glob "^5.0.15"
+ handlebars "^4.0.1"
+ js-yaml "3.x"
+ mkdirp "0.5.x"
+ nopt "3.x"
+ once "1.x"
+ resolve "1.1.x"
+ supports-color "^3.1.0"
+ which "^1.1.1"
+ wordwrap "^1.0.0"
+
jju@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa"
@@ -2266,6 +2964,13 @@ js-tokens@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5"
+js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.5.1:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^2.6.0"
+
jsbn@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
@@ -2288,6 +2993,12 @@ json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ dependencies:
+ jsonify "~0.0.0"
+
json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
@@ -2336,6 +3047,13 @@ jstransform@^11.0.3:
object-assign "^2.0.0"
source-map "^0.4.2"
+jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.5.tgz#9ba6297198d9f754594d62e59496ffb923778dd4"
+ dependencies:
+ acorn-jsx "^3.0.1"
+ object-assign "^4.1.0"
+
karma-chrome-launcher@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.0.0.tgz#c2790c5a32b15577d0fff5a4d5a2703b3b439c25"
@@ -2349,6 +3067,16 @@ karma-cli@1.0.1:
dependencies:
resolve "^1.1.6"
+karma-coverage@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.1.tgz#5aff8b39cf6994dc22de4c84362c76001b637cf6"
+ dependencies:
+ dateformat "^1.0.6"
+ istanbul "^0.4.0"
+ lodash "^3.8.0"
+ minimatch "^3.0.0"
+ source-map "^0.5.1"
+
karma-firefox-launcher@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.0.0.tgz#e08af3ce42e39860c2952ea7b7eaa64d63508bdc"
@@ -2365,6 +3093,15 @@ karma-mocha@^1.3.0:
dependencies:
minimist "1.2.0"
+karma-sauce-launcher@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/karma-sauce-launcher/-/karma-sauce-launcher-1.1.0.tgz#3d083cf5659d6736ab97bcee5d8acd86ad522212"
+ dependencies:
+ q "^1.4.1"
+ sauce-connect-launcher "^0.17.0"
+ saucelabs "^1.3.0"
+ wd "^1.0.0"
+
karma-sourcemap-loader@^0.3.7:
version "0.3.7"
resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8"
@@ -2428,6 +3165,23 @@ lazy-cache@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+lazystream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
+ dependencies:
+ readable-stream "^2.0.5"
+
+lcov-parse@0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3"
+
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
load-json-file@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
@@ -2438,7 +3192,7 @@ load-json-file@^1.0.0:
pinkie-promise "^2.0.0"
strip-bom "^2.0.0"
-loader-utils@^0.2.11, loader-utils@^0.2.5:
+loader-utils@0.x.x, loader-utils@^0.2.11, loader-utils@^0.2.5:
version "0.2.16"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d"
dependencies:
@@ -2480,10 +3234,6 @@ lodash._baseflatten@~4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash._baseflatten/-/lodash._baseflatten-4.1.1.tgz#5c87403b88f3687a88d26424faadf3aa054aab0d"
-lodash._baseindexof@*:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c"
-
lodash._baseuniq@~4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.4.0.tgz#a445294347a2f5311f585fe3225644530b9b8fae"
@@ -2498,25 +3248,11 @@ lodash._baseuniq@~4.5.0:
lodash._createset "~4.0.0"
lodash._setcache "~4.1.0"
-lodash._bindcallback@*:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
-
-lodash._cacheindexof@*:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92"
-
-lodash._createcache@*:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093"
- dependencies:
- lodash._getnative "^3.0.0"
-
lodash._createset@~4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26"
-lodash._getnative@*, lodash._getnative@^3.0.0:
+lodash._getnative@^3.0.0:
version "3.9.1"
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
@@ -2542,6 +3278,10 @@ lodash.clonedeep@~4.3.0:
dependencies:
lodash._baseclone "~4.5.0"
+lodash.cond@^4.3.0:
+ version "4.5.2"
+ resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
+
lodash.create@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
@@ -2586,14 +3326,14 @@ lodash.padstart@^4.1.0:
version "4.6.1"
resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b"
+lodash.pickby@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff"
+
lodash.rest@^4.0.0:
version "4.0.5"
resolved "https://registry.yarnpkg.com/lodash.rest/-/lodash.rest-4.0.5.tgz#954ef75049262038c96d1fc98b28fdaf9f0772aa"
-lodash.restparam@*:
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
-
lodash.union@~4.2.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.2.1.tgz#6871017b9b1ff71952c1e2bb2e25b1046a7e2842"
@@ -2615,18 +3355,26 @@ lodash.without@~4.1.0:
lodash._basedifference "~4.4.0"
lodash.rest "^4.0.0"
+lodash@3.10.1, lodash@^3.8.0:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
+
+lodash@4.16.2:
+ version "4.16.2"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.2.tgz#3e626db827048a699281a8a125226326cfc0e652"
+
lodash@4.5.1:
version "4.5.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.5.1.tgz#80e8a074ca5f3893a6b1c10b2a636492d710c316"
-lodash@^3.8.0:
- version "3.10.1"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
-
-lodash@^4.14.0, lodash@^4.2.0, lodash@^4.5.0:
+lodash@^4.0.0, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.8.0:
version "4.17.3"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.3.tgz#557ed7d2a9438cac5fd5a43043ca60cb455e01f7"
+log-driver@1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056"
+
log4js@^0.6.31:
version "0.6.38"
resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd"
@@ -2648,6 +3396,13 @@ loose-envify@^1.0.0, loose-envify@^1.1.0:
dependencies:
js-tokens "^2.0.0"
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
lru-cache@2, lru-cache@2.2.x:
version "2.2.4"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d"
@@ -2659,6 +3414,10 @@ lru-cache@^4.0.1, lru-cache@~4.0.1:
pseudomap "^1.0.1"
yallist "^2.0.0"
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+
map-stream@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
@@ -2693,6 +3452,21 @@ memory-fs@~0.4.1:
errno "^0.1.3"
readable-stream "^2.0.1"
+meow@^3.3.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
@@ -2750,7 +3524,7 @@ minimatch@1:
lru-cache "2"
sigmund "~1.0.0"
-"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.3:
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
dependencies:
@@ -2766,11 +3540,11 @@ minimist@0.0.8, minimist@~0.0.1:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-minimist@1.2.0, minimist@^1.2.0:
+minimist@1.2.0, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-mkdirp@0.5.1, mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
+mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
@@ -2800,14 +3574,22 @@ ms@0.7.2:
version "0.7.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
-mute-stream@~0.0.4:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db"
+mute-stream@0.0.5, mute-stream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
nan@^2.3.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8"
+native-promise-only@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+
ncp@0.4.x:
version "0.4.2"
resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574"
@@ -2915,7 +3697,7 @@ node-uuid@~1.4.7:
version "1.4.7"
resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f"
-"nopt@2 || 3", nopt@~3.0.6:
+"nopt@2 || 3", nopt@3.x, nopt@~3.0.6:
version "3.0.6"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
dependencies:
@@ -2925,7 +3707,7 @@ normalize-git-url@~3.0.1, normalize-git-url@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4"
-normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, "normalize-package-data@~1.0.1 || ^2.0.0", normalize-package-data@~2.3.5:
+normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, "normalize-package-data@~1.0.1 || ^2.0.0", normalize-package-data@~2.3.5:
version "2.3.5"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
dependencies:
@@ -2934,7 +3716,7 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, "normalize-package
semver "2 || 3 || 4 || 5"
validate-npm-package-license "^3.0.1"
-normalize-path@^2.0.1:
+normalize-path@^2.0.0, normalize-path@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
@@ -3204,35 +3986,26 @@ oauth-sign@~0.8.0, oauth-sign@~0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+object-assign@4.x.x, object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+
object-assign@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
-object-assign@^4.0.1, object-assign@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
-
object-component@0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
-object-inspect@^1.1.0:
+object-inspect@^1.0.2:
version "1.2.1"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.2.1.tgz#3b62226eb8f6d441751c7d8f22a20ff80ac9dc3f"
-object-keys@^1.0.8, object-keys@^1.0.9:
+object-keys@^1.0.8:
version "1.0.11"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
-object.entries@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f"
- dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.6.1"
- function-bind "^1.1.0"
- has "^1.0.1"
-
object.omit@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
@@ -3246,18 +4019,22 @@ on-finished@~2.3.0:
dependencies:
ee-first "1.1.1"
-once@^1.3.0, once@^1.3.3, once@~1.4.0:
+once@1.x, once@^1.3.0, once@^1.3.3, once@~1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
wrappy "1"
-once@~1.3.3:
+once@~1.3.0, once@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
dependencies:
wrappy "1"
+onetime@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+
opener@~1.4.1:
version "1.4.2"
resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.2.tgz#b32582080042af8680c389a499175b4c54fff523"
@@ -3269,6 +4046,17 @@ optimist@0.6.1, optimist@^0.6.1, optimist@~0.6.0:
minimist "~0.0.1"
wordwrap "~0.0.2"
+optionator@^0.8.1, optionator@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
options@>=0.0.5:
version "0.0.6"
resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
@@ -3379,6 +4167,12 @@ path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+path-to-regexp@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
+ dependencies:
+ isarray "0.0.1"
+
path-type@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
@@ -3417,6 +4211,12 @@ pkg-dir@^1.0.0:
dependencies:
find-up "^1.0.0"
+pkg-up@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26"
+ dependencies:
+ find-up "^1.0.0"
+
pkginfo@0.2.x:
version "0.2.3"
resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.2.3.tgz#7239c42a5ef6c30b8f328439d9b9ff71042490f8"
@@ -3425,6 +4225,14 @@ pkginfo@0.x.x:
version "0.4.0"
resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.0.tgz#349dbb7ffd38081fcadc0853df687f0c7744cd65"
+pluralize@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+
preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
@@ -3441,6 +4249,10 @@ process@^0.11.0:
version "0.11.9"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
+progress@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+
promise@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf"
@@ -3496,7 +4308,7 @@ punycode@^1.2.4, punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-q@1.4.1, q@^1.1.2:
+q@1.4.1, q@^1.1.2, q@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
@@ -3632,7 +4444,7 @@ read@1, read@1.0.x, read@~1.0.1, read@~1.0.7:
dependencies:
mute-stream "~0.0.4"
-"readable-stream@1 || 2", "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.2.2:
+"readable-stream@1 || 2", readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
dependencies:
@@ -3676,7 +4488,7 @@ readable-stream@~2.1.4, readable-stream@~2.1.5:
string_decoder "~0.10.x"
util-deprecate "~1.0.1"
-readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0:
+readdir-scoped-modules@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747"
dependencies:
@@ -3694,6 +4506,14 @@ readdirp@^2.0.0:
readable-stream "^2.0.2"
set-immediate-shim "^1.0.1"
+readline2@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ mute-stream "0.0.5"
+
realize-package-specifier@~3.0.1:
version "3.0.3"
resolved "https://registry.yarnpkg.com/realize-package-specifier/-/realize-package-specifier-3.0.3.tgz#d0def882952b8de3f67eba5e91199661271f41f4"
@@ -3710,6 +4530,19 @@ recast@^0.11.17:
private "~0.1.5"
source-map "~0.5.0"
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ dependencies:
+ resolve "^1.1.6"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
regenerate@^1.2.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260"
@@ -3769,9 +4602,9 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
-request@2, request@^2.47.0, request@^2.74.0, request@~2.74.0:
- version "2.74.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab"
+request@2, request@2.75.0, request@^2.47.0, request@^2.74.0:
+ version "2.75.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93"
dependencies:
aws-sign2 "~0.6.0"
aws4 "^1.2.1"
@@ -3780,7 +4613,7 @@ request@2, request@^2.47.0, request@^2.74.0, request@~2.74.0:
combined-stream "~1.0.5"
extend "~3.0.0"
forever-agent "~0.6.1"
- form-data "~1.0.0-rc4"
+ form-data "~2.0.0"
har-validator "~2.0.6"
hawk "~3.1.3"
http-signature "~1.1.0"
@@ -3850,14 +4683,62 @@ request@~2.69.0:
tough-cookie "~2.2.0"
tunnel-agent "~0.4.1"
+request@~2.74.0:
+ version "2.74.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ bl "~1.1.2"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~1.0.0-rc4"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ node-uuid "~1.4.7"
+ oauth-sign "~0.8.1"
+ qs "~6.2.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+
+require-uncached@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+ dependencies:
+ caller-path "^0.1.0"
+ resolve-from "^1.0.0"
+
requires-port@1.x.x:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+resolve-from@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+
+resolve@1.1.x:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+
resolve@^1.1.6:
version "1.2.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c"
+restore-cursor@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+ dependencies:
+ exit-hook "^1.0.0"
+ onetime "^1.0.0"
+
retry@^0.10.0, retry@~0.10.0:
version "0.10.1"
resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
@@ -3900,10 +4781,26 @@ rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.2, rimraf@^2.5
dependencies:
glob "^7.0.5"
+rimraf@2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.3.tgz#e5b51c9437a4c582adb955e9f28cf8d945e272af"
+ dependencies:
+ glob "^5.0.14"
+
ripemd160@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
+run-async@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
+ dependencies:
+ once "^1.3.0"
+
+rx-lite@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
+
samsam@^1.1.3:
version "1.2.1"
resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.2.1.tgz#edd39093a3184370cb859243b2bdf255e7d8ea67"
@@ -3912,6 +4809,22 @@ samsam@~1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.3.tgz#9f5087419b4d091f232571e7fa52e90b0f552621"
+sauce-connect-launcher@^0.17.0:
+ version "0.17.0"
+ resolved "https://registry.yarnpkg.com/sauce-connect-launcher/-/sauce-connect-launcher-0.17.0.tgz#908d9311ecaf17dd9b4647a1435fd4a2072e80ce"
+ dependencies:
+ adm-zip "~0.4.3"
+ async "1.4.0"
+ https-proxy-agent "~1.0.0"
+ lodash "3.10.1"
+ rimraf "2.4.3"
+
+saucelabs@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.3.0.tgz#d240e8009df7fa87306ec4578a69ba3b5c424fee"
+ dependencies:
+ https-proxy-agent "^1.0.0"
+
"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", semver@5.1.0, "semver@^2.3.0 || 3.x || 4 || 5", semver@~5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.0.tgz#85f2cf8550465c4df000cf7d86f6b054106ab9e5"
@@ -3920,6 +4833,10 @@ semver@^4.1.0, semver@~4.3.3:
version "4.3.6"
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
+semver@~5.0.1:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
+
semver@~5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
@@ -3999,6 +4916,14 @@ shell-quote@^1.6.1:
array-reduce "~0.0.0"
jsonify "~0.0.0"
+shelljs@^0.7.5:
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.5.tgz#2eef7a50a21e1ccf37da00df767ec69e30ad0675"
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
sigmund@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
@@ -4008,18 +4933,26 @@ signal-exit@^3.0.0:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
sinon@next:
- version "2.0.0-pre.4"
- resolved "https://registry.yarnpkg.com/sinon/-/sinon-2.0.0-pre.4.tgz#f29fbcca8d2fa73b633a3b0c0e4e3c78f2360c2c"
+ version "2.0.0-pre.5"
+ resolved "https://registry.yarnpkg.com/sinon/-/sinon-2.0.0-pre.5.tgz#d87357f93ba0404c89b9d50e29e4681382f766d6"
dependencies:
+ colors "^1.1.2"
+ diff "^3.1.0"
formatio "1.1.1"
lolex "^1.4.0"
+ native-promise-only "^0.8.1"
+ path-to-regexp "^1.7.0"
samsam "^1.1.3"
- text-encoding "0.5.2"
+ text-encoding "0.6.2"
slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+
slide@^1.1.3, slide@^1.1.5, slide@~1.1.3, slide@~1.1.6:
version "1.1.6"
resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
@@ -4139,16 +5072,22 @@ source-map@^0.1.41:
dependencies:
amdefine ">=0.0.4"
-source-map@^0.4.2, source-map@~0.4.1:
+source-map@^0.4.2, source-map@^0.4.4, source-map@~0.4.1:
version "0.4.4"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
dependencies:
amdefine ">=0.0.4"
-source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.0, source-map@~0.5.1:
+source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@~0.5.0, source-map@~0.5.1:
version "0.5.6"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+source-map@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
+ dependencies:
+ amdefine ">=0.0.4"
+
spdx-correct@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
@@ -4169,6 +5108,10 @@ split@0.3:
dependencies:
through "2"
+sprintf-js@^1.0.3, sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+
sshpk@^1.7.0:
version "1.10.1"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
@@ -4227,6 +5170,13 @@ string-width@^1.0.1:
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
+string-width@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^3.0.0"
+
string.prototype.padend@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0"
@@ -4243,7 +5193,7 @@ stringstream@~0.0.4:
version "0.0.5"
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
-strip-ansi@*, strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@~3.0.1:
+strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@~3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
dependencies:
@@ -4255,7 +5205,17 @@ strip-bom@^2.0.0:
dependencies:
is-utf8 "^0.2.0"
-strip-json-comments@~1.0.4:
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@~1.0.1, 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"
@@ -4273,6 +5233,17 @@ supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+table@^3.7.8:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
+ dependencies:
+ ajv "^4.7.0"
+ ajv-keywords "^1.0.0"
+ chalk "^1.1.1"
+ lodash "^4.0.0"
+ slice-ansi "0.0.4"
+ string-width "^2.0.0"
+
tapable@^0.1.8, tapable@~0.1.8:
version "0.1.10"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
@@ -4290,6 +5261,15 @@ tar-pack@~3.3.0:
tar "~2.2.1"
uid-number "~0.0.6"
+tar-stream@^1.5.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.2.tgz#fbc6c6e83c1a19d4cb48c7d96171fc248effc7bf"
+ dependencies:
+ bl "^1.0.0"
+ end-of-stream "^1.0.0"
+ readable-stream "^2.0.0"
+ xtend "^4.0.0"
+
tar@^2.0.0, tar@~2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
@@ -4298,15 +5278,15 @@ tar@^2.0.0, tar@~2.2.1:
fstream "^1.0.2"
inherits "2"
-text-encoding@0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.5.2.tgz#85b4660819f088777609465551690fea137d824a"
+text-encoding@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.2.tgz#111e648e757bea92d34ef0019d9fdb06ebb9f53e"
text-table@~0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
-through@2, through@~2.3, through@~2.3.1, through@~2.3.4:
+through@2, through@^2.3.6, through@~2.3, through@~2.3.1, through@~2.3.4:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
@@ -4316,10 +5296,6 @@ timers-browserify@^2.0.2:
dependencies:
setimmediate "^1.0.4"
-tmatch@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/tmatch/-/tmatch-2.0.1.tgz#0c56246f33f30da1b8d3d72895abaf16660f38cf"
-
tmp@0.0.28:
version "0.0.28"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120"
@@ -4348,6 +5324,14 @@ tough-cookie@~2.3.0:
dependencies:
punycode "^1.4.1"
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+
+tryit@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
+
tty-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@@ -4360,6 +5344,12 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ dependencies:
+ prelude-ls "~1.1.2"
+
type-is@~1.6.13:
version "1.6.14"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2"
@@ -4384,7 +5374,7 @@ uglify-js@2.4.24:
uglify-to-browserify "~1.0.0"
yargs "~3.5.4"
-uglify-js@~2.7.3:
+uglify-js@^2.6, uglify-js@~2.7.3:
version "2.7.5"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
dependencies:
@@ -4409,6 +5399,13 @@ umask@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d"
+underscore.string@3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db"
+ dependencies:
+ sprintf-js "^1.0.3"
+ util-deprecate "^1.0.2"
+
unique-filename@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3"
@@ -4432,7 +5429,7 @@ url@^0.11.0:
punycode "1.3.2"
querystring "0.2.0"
-user-home@2.0.0:
+user-home@2.0.0, user-home@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
dependencies:
@@ -4448,7 +5445,7 @@ utf8@2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.0.tgz#0cfec5c8052d44a23e3aaa908104e8075f95dfd5"
-util-deprecate@~1.0.1:
+util-deprecate@^1.0.2, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -4481,7 +5478,7 @@ uuid@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
-validate-npm-package-license@*, validate-npm-package-license@^3.0.1, validate-npm-package-license@~3.0.1:
+validate-npm-package-license@^3.0.1, validate-npm-package-license@~3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
dependencies:
@@ -4494,6 +5491,10 @@ validate-npm-package-name@^2.0.1, validate-npm-package-name@~2.2.2:
dependencies:
builtins "0.0.7"
+vargs@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/vargs/-/vargs-0.1.0.tgz#6b6184da6520cc3204ce1b407cac26d92609ebff"
+
vary@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140"
@@ -4528,6 +5529,18 @@ wcwidth@^1.0.0:
dependencies:
defaults "^1.0.3"
+wd@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/wd/-/wd-1.1.1.tgz#f2c6c41700f69e3009dcfc3574f42e9ae70fb5c1"
+ dependencies:
+ archiver "1.1.0"
+ async "2.0.1"
+ lodash "4.16.2"
+ q "1.4.1"
+ request "2.75.0"
+ underscore.string "3.3.4"
+ vargs "0.1.0"
+
webpack-core@~0.6.9:
version "0.6.9"
resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2"
@@ -4584,7 +5597,7 @@ whatwg-fetch@>=0.10.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.1.tgz#078b9461bbe91cea73cbce8bb122a05f9e92b772"
-which@1, which@^1.2.1, which@^1.2.9, which@~1.2.11, which@~1.2.4:
+which@1, which@^1.1.1, which@^1.2.1, which@^1.2.9, which@~1.2.11, which@~1.2.4:
version "1.2.12"
resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
dependencies:
@@ -4612,13 +5625,13 @@ winston@0.6.x:
request "2.9.x"
stack-trace "0.0.x"
-wordwrap@0.0.2:
+wordwrap@0.0.2, wordwrap@~0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-wordwrap@~0.0.2:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+wordwrap@^1.0.0, wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
wrappy@1, wrappy@~1.0.1, wrappy@~1.0.2:
version "1.0.2"
@@ -4632,6 +5645,12 @@ write-file-atomic@~1.1.4:
imurmurhash "^0.1.4"
slide "^1.1.5"
+write@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+ dependencies:
+ mkdirp "^0.5.1"
+
ws@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.0.1.tgz#7d0b2a2e58cddd819039c29c9de65045e1b310e9"
@@ -4687,3 +5706,12 @@ yargs@~3.5.4:
yeast@0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+
+zip-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.1.0.tgz#2ad479fffc168e05a888e8c348ff6813b3f13733"
+ dependencies:
+ archiver-utils "^1.3.0"
+ compress-commons "^1.1.0"
+ lodash "^4.8.0"
+ readable-stream "^2.0.0"