├── .babelrc ├── .gitignore ├── .npmignore ├── .nvmrc ├── LICENSE.md ├── README.md ├── example ├── .babelrc ├── README.md ├── actions │ └── index.js ├── components │ ├── Layout.js │ ├── Picker.js │ └── Posts.js ├── controllers │ └── App.js ├── index.html ├── index.js ├── package.json ├── reducers │ └── index.js ├── selectors │ └── index.js ├── server.js ├── store │ └── configureStore.js └── webpack.config.js ├── package.json ├── src ├── index.js ├── selector_utils.js └── utils.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015-loose", "react"], 3 | "plugins": [] 4 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | lib 2 | node_modules -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # Do not publish .babelrc to npm since it can create problems with babel 5 in other projects 2 | .babelrc 3 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 5.1 -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Alan Johnson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-redux-controller 2 | 3 | **react-redux-controller** is a library that adds some opinion to the [react-redux](https://github.com/rackt/react-redux) binding of [React](https://facebook.github.io/react/index.html) components to the [Redux](http://redux.js.org/) store. It creates the entity of a `Controller`, which is intended to be the single point of integration between React and Redux. The controller passes data and callbacks to the UI components via the [React `context`](https://facebook.github.io/react/docs/context.html). It's one solution to [the question](http://stackoverflow.com/a/34320909/807674) of how to get data and controller-like methods (e.g. event handlers) to the React UI components. 4 | 5 | > **Note** Although _react-redux-controller_ continues to be used in production at Artsy, it is not actively being developed. We may or may not continue to develop it. The issues on the future of the architecture should be considered a doucment on lessons learned, rather than an intention to actually release a future version. Anyone should feel free use this code as-is or develop their own fork. 6 | 7 | ## Philosophy 8 | 9 | This library takes the opinion that React components should solely be focused on the job of rendering and capturing user input, and that Redux actions and reducers should be soley focused on the job of managing the store and providing a view of the state of the store in the form of [selectors](http://redux.js.org/docs/basics/UsageWithReact.html). The plumbing of distributing data to components, as well as deciding what to fetch, when to fetch, how to manage latency, and what to do with error handling, should be vested in an explicit controller layer. 10 | 11 | This differs from alternative methods in a number of ways: 12 | 13 | - The ancestors of a component are not responsible for conveying dependencies to via `props` -- particularly when it comes to dependencies the ancestors don't use themselves. 14 | - The components are not coupled to Redux in any way -- no `connect` distributed throughout the component tree. 15 | - There are no [smart components](https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0#.m5y0saa0k). Well there's one, but it's hidden inside the Controller. 16 | - Action creators do not perform any fetching. They are only responsible for constructing action objects, as is the case in vanilla Redux, with no middleware needed. 17 | 18 | ## Usage 19 | 20 | The **controller** factory requires 3 parameters: 21 | 22 | - The root component of the UI component tree. 23 | - An object that holds controller generator functions. 24 | - Any number of selector bundles, which are likely simply imported selector modules, each selector annotated a [`propType`](https://facebook.github.io/react/docs/reusable-components.html) that indicates what kind of data it provides. 25 | 26 | The functionality of the controller layer is implemented using [generator functions](http://www.2ality.com/2015/03/es6-generators.html). Within these functions, `yield` may be used await the results of [Promises](http://www.2ality.com/2014/09/es6-promises-foundations.html) and to request selector values and root component properties. As a very rough sketch of how you might use this library: 27 | 28 | ```javascript 29 | // controllers/app_controller.js 30 | 31 | import { controller, getProps } from 'react-redux-controller'; 32 | import AppLayout from '../components/app_layout'; 33 | import * as actions from '../actions'; 34 | import * as mySelectors from '../selectors/my_selectors'; 35 | 36 | const controllerGenerators = { 37 | *initialize() { 38 | // ... any code that should run before initial render (like loading actions) 39 | }, 40 | *onUserActivity(meaningfulParam) { 41 | const { dispatch, otherData } = yield getProps; 42 | dispatch(actions.fetchingData()); 43 | try { 44 | const apiData = yield httpRequest(`http://myapi.com/${otherData}`); 45 | return dispatch(actions.fetchingSuccessful(apiData)); 46 | } catch (err) { 47 | return dispatch(actions.errorFetching(err)); 48 | } 49 | }, 50 | // ... other controller generators follow 51 | }; 52 | 53 | const selectorBundles = [ 54 | mySelectors, 55 | ]; 56 | 57 | export default controller(AppLayout, controllerGenerators, selectorBundles); 58 | 59 | ``` 60 | 61 | ## Example 62 | 63 | To see an in-depth example of usage of this library, [the async example from the redux guide](http://redux.js.org/docs/advanced/ExampleRedditAPI.html) is ported to use the controller approach [in this repo](https://github.com/artsy/react-redux-controller/blob/master/example/README.md). 64 | -------------------------------------------------------------------------------- /example/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["react", "es2015"], 3 | "env": { 4 | "development": { 5 | "plugins": [ 6 | ["react-transform", { 7 | "transforms": [{ 8 | "transform": "react-transform-hmr", 9 | "imports": ["react"], 10 | "locals": ["module"] 11 | }] 12 | }] 13 | ] 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # Async example 2 | 3 | This directory contains a port of [the async example from the redux guide](http://redux.js.org/docs/advanced/ExampleRedditAPI.html). Here, we point out some of the points of interest in using react-redux-controller. 4 | 5 | ## Structual differences from original example 6 | 7 | Below are some of the fundamental ways in which the approach here differs from the async example: 8 | 9 | ### Dumb components 10 | 11 | In line with Dan Abramov's [post on Smart and Dumb components](https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0#.ho45ybvub), it's interesting to note that the controller approach hides the smart components entirely. Here, [all of the components](https://github.com/artsy/react-redux-controller/tree/master/example/components) are stateless functional components, which lets them focus purely on UI structure and I/O. Even up to the root UI component, they are directly coupled only to React itself and other components. 12 | 13 | ### Minimal use of manual `props` passing 14 | 15 | In this paradigm, typical React `props` passing is not used for general dependencies. Instead, it's used for intentional coupling between components. This might be an iterator-iteratee relationship, or configuration of a particular use of a general-purpose subcomponent. When the relationship is simply structural, no `props` are passed. See the [Layout component](https://github.com/artsy/react-redux-controller/blob/master/example/components/Layout.js#L31). 16 | 17 | This small example doesn't really sell the benefits of this decoupling. But in a design with deeply nested components and a lot of user interactions, the branches of the component tree would be vastly simplified. 18 | 19 | ### Context types to declare dependencies 20 | 21 | The `contextTypes` annotation on components is used to formalize the dependencies between the controller and the components. See the [Layout component](https://github.com/artsy/react-redux-controller/blob/master/example/components/Layout.js#L38-L43), for instance. 22 | 23 | ### Use of selectors as the materialize view of the store 24 | 25 | As mentioned in the Redux guide, it's best to keep the store itself normalized. But normalization isn't the ideal way for the controller methods and the views to consume model data, especially when it comes to derived data. By storing all calculations in a [selector layer](https://github.com/artsy/react-redux-controller/blob/master/example/selectors/index.js), components can be written to depend only on the derived data. Note also how the selectors are annotated with the prop types they return. 26 | 27 | In real use, you might use tools like reselect and normalizr, as suggested in the Redux guide. 28 | 29 | ### Mapping of DOM event to domain event 30 | 31 | In this example, the DOM belongs to the view layer, and the view performs any DOM manipulation before invoking controller methods. See the [Layout component](https://github.com/artsy/react-redux-controller/blob/master/example/components/Layout.js#L18)'s handling of the refresh button. 32 | 33 | ### Dumb action creators 34 | 35 | Compared to [redux-thunk](https://github.com/gaearon/redux-thunk) and similar approaches to handling asynchrony, [action creators](https://github.com/artsy/react-redux-controller/blob/master/example/actions/index.js) no longer contain any real logic, which now exists in the explicit controller layer. 36 | 37 | ## Practical usage 38 | 39 | This library offers a number of ways of accomplishing basic controller tasks that differ from other approaches. This example helps to document exactly how it works in practice. 40 | 41 | ### `*initialize` method for startup actions 42 | 43 | This magic generator method can be used to kick off any activity that might need to happen upon launching the application. In a [universal app](https://medium.com/@mjackson/universal-javascript-4761051b7ae9), the initial state would be delivered with the webpage, so that the client could boot right up into it's steady-state. But in a client-side application that needs to be able to make a cold start, like this one, this is the way to initialize. See [the App controller](https://github.com/artsy/react-redux-controller/blob/master/example/controllers/App.js#L10-14). 44 | 45 | ### `yield` to resolve promises 46 | 47 | Use of [co](https://github.com/tj/co) allows ES6 `yield` to be used to suspend controller generators on Promises, which are resumed returning the resolved value of the promise (or throwing exceptions, in the case of rejection). This is used in the example to [fetch from the Reddit API](https://github.com/artsy/react-redux-controller/blob/master/example/controllers/App.js#L46). The upside of this is that regular control flow can be used, interleaved with asynchronicity. 48 | 49 | ### `yield` to get state and dispatch 50 | 51 | [Special symbols](https://github.com/artsy/react-redux-controller/blob/master/example/controllers/App.js#L4) can be used to access the controller's props, as injected by react-redux. These include the raw state from the store and `dispatch` for triggering state changes. [Controller generators use `yield`](https://github.com/artsy/react-redux-controller/blob/master/example/controllers/App.js#L17) to request these dependencies. 52 | 53 | ### `yield` to delegate to other controller methods 54 | 55 | Controller methods are composable. Behind the scenes, they are converted into regular method functions that return promises, and they are bound into a shared `this` context. This means you can call other controller methods and use `yield` await them, as seen in [the App controller](https://github.com/artsy/react-redux-controller/blob/master/example/controllers/App.js#L22). 56 | -------------------------------------------------------------------------------- /example/actions/index.js: -------------------------------------------------------------------------------- 1 | export const REQUEST_POSTS = 'REQUEST_POSTS' 2 | export const RECEIVE_POSTS = 'RECEIVE_POSTS' 3 | export const SELECT_REDDIT = 'SELECT_REDDIT' 4 | export const INVALIDATE_REDDIT = 'INVALIDATE_REDDIT' 5 | 6 | export function selectReddit(reddit) { 7 | return { 8 | type: SELECT_REDDIT, 9 | reddit 10 | } 11 | } 12 | 13 | export function invalidateReddit(reddit) { 14 | return { 15 | type: INVALIDATE_REDDIT, 16 | reddit 17 | } 18 | } 19 | 20 | export function requestPosts(reddit) { 21 | return { 22 | type: REQUEST_POSTS, 23 | reddit 24 | } 25 | } 26 | 27 | export function receivePosts(reddit, posts) { 28 | return { 29 | type: RECEIVE_POSTS, 30 | reddit, 31 | posts, 32 | receivedAt: Date.now() 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /example/components/Layout.js: -------------------------------------------------------------------------------- 1 | import React, { PropTypes } from 'react' 2 | import Picker from '../components/Picker' 3 | import Posts from '../components/Posts' 4 | 5 | export default function Layout(_, { posts, isFetching, lastUpdated, onRefresh }) { 6 | return ( 7 |
8 | 9 |

10 | {lastUpdated && 11 | 12 | Last updated at {new Date(lastUpdated).toLocaleTimeString()}. 13 | {' '} 14 | 15 | } 16 | {!isFetching && 17 | { e.preventDefault(); onRefresh() } }> 19 | Refresh 20 | 21 | } 22 |

23 | {isFetching && posts.length === 0 && 24 |

Loading...

25 | } 26 | {!isFetching && posts.length === 0 && 27 |

Empty.

28 | } 29 | {posts.length > 0 && 30 |
31 | 32 |
33 | } 34 |
35 | ) 36 | } 37 | 38 | Layout.contextTypes = { 39 | posts: PropTypes.array.isRequired, 40 | isFetching: PropTypes.bool.isRequired, 41 | lastUpdated: PropTypes.number, 42 | onRefresh: PropTypes.func.isRequired 43 | } 44 | -------------------------------------------------------------------------------- /example/components/Picker.js: -------------------------------------------------------------------------------- 1 | import React, { PropTypes } from 'react' 2 | 3 | export default function Picker({ options }, { selectedReddit, onSelectReddit }) { 4 | return ( 5 | 6 |

{ selectedReddit }

7 | 15 |
16 | ) 17 | } 18 | 19 | Picker.propTypes = { 20 | options: PropTypes.arrayOf( 21 | PropTypes.string.isRequired 22 | ).isRequired 23 | } 24 | 25 | Picker.contextTypes = { 26 | selectedReddit: PropTypes.string.isRequired, 27 | onSelectReddit: PropTypes.func.isRequired 28 | } 29 | -------------------------------------------------------------------------------- /example/components/Posts.js: -------------------------------------------------------------------------------- 1 | import React, { PropTypes } from 'react' 2 | 3 | export default function Posts(_, { posts }) { 4 | return ( 5 | 10 | ) 11 | } 12 | 13 | Posts.contextTypes = { 14 | posts: PropTypes.array.isRequired 15 | } 16 | -------------------------------------------------------------------------------- /example/controllers/App.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill' 2 | import fetch from 'isomorphic-fetch' 3 | import { controller, getProps } from 'react-redux-controller' 4 | import * as actions from '../actions' 5 | import * as selectors from '../selectors' 6 | import Layout from '../components/Layout' 7 | 8 | const controllerGenerators = { 9 | *initialize() { 10 | const { selectedReddit } = yield getProps 11 | 12 | yield this.fetchPostsIfNeeded(selectedReddit) 13 | }, 14 | 15 | *onSelectReddit(nextReddit) { 16 | const { dispatch, selectedReddit } = yield getProps 17 | 18 | dispatch(actions.selectReddit(nextReddit)) 19 | 20 | if (nextReddit !== selectedReddit) { 21 | yield this.fetchPostsIfNeeded(nextReddit) 22 | } 23 | }, 24 | 25 | *onRefresh() { 26 | const { dispatch, selectedReddit } = yield getProps 27 | 28 | dispatch(actions.invalidateReddit(selectedReddit)) 29 | yield this.fetchPostsIfNeeded(selectedReddit) 30 | }, 31 | 32 | *fetchPostsIfNeeded(reddit) { 33 | const { postsByReddit } = yield getProps 34 | 35 | const posts = postsByReddit[reddit] 36 | if (!posts || !posts.isFetching || posts.didInvalidate) { 37 | yield this.fetchPosts(reddit) 38 | } 39 | }, 40 | 41 | *fetchPosts(reddit) { 42 | const { dispatch } = yield getProps 43 | 44 | dispatch(actions.requestPosts(reddit)) 45 | const response = yield fetch(`http://www.reddit.com/r/${reddit}.json`) 46 | const responseJson = yield response.json() 47 | const newPosts = responseJson.data.children.map(child => child.data) 48 | dispatch(actions.receivePosts(reddit, newPosts)) 49 | } 50 | } 51 | 52 | export default controller(Layout, controllerGenerators, selectors) 53 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redux async example 5 | 6 | 7 |
8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /example/index.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill' 2 | import React from 'react' 3 | import { render } from 'react-dom' 4 | import { Provider } from 'react-redux' 5 | import App from './controllers/App' 6 | import configureStore from './store/configureStore' 7 | 8 | const store = configureStore() 9 | 10 | render( 11 | 12 | 13 | , 14 | document.getElementById('root') 15 | ) 16 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "redux-async-example", 3 | "version": "0.0.0", 4 | "description": "Redux async example", 5 | "scripts": { 6 | "start": "node server.js" 7 | }, 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/rackt/redux.git" 11 | }, 12 | "keywords": [ 13 | "react", 14 | "reactjs", 15 | "hot", 16 | "reload", 17 | "hmr", 18 | "live", 19 | "edit", 20 | "webpack", 21 | "flux" 22 | ], 23 | "license": "MIT", 24 | "bugs": { 25 | "url": "https://github.com/rackt/redux/issues" 26 | }, 27 | "homepage": "http://rackt.github.io/redux", 28 | "dependencies": { 29 | "isomorphic-fetch": "^2.1.1", 30 | "react": "^0.14.0", 31 | "react-dom": "^0.14.0", 32 | "react-redux": "^4.0.0", 33 | "react-redux-controller": "^0.1.1", 34 | "redux": "^3.0.0", 35 | "redux-logger": "^2.0.2", 36 | "redux-thunk": "^0.1.0" 37 | }, 38 | "devDependencies": { 39 | "babel-core": "^6.3.21", 40 | "babel-loader": "^6.2.0", 41 | "babel-plugin-react-transform": "^2.0.0-beta1", 42 | "babel-polyfill": "^6.3.14", 43 | "babel-preset-es2015": "^6.3.13", 44 | "babel-preset-react": "^6.3.13", 45 | "expect": "^1.6.0", 46 | "express": "^4.13.3", 47 | "node-libs-browser": "^0.5.2", 48 | "react-transform-hmr": "^1.0.0", 49 | "webpack": "^1.11.0", 50 | "webpack-dev-middleware": "^1.2.0", 51 | "webpack-hot-middleware": "^2.2.0" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /example/reducers/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux' 2 | import { 3 | SELECT_REDDIT, INVALIDATE_REDDIT, 4 | REQUEST_POSTS, RECEIVE_POSTS 5 | } from '../actions' 6 | 7 | function selectedReddit(state = 'reactjs', action) { 8 | switch (action.type) { 9 | case SELECT_REDDIT: 10 | return action.reddit 11 | default: 12 | return state 13 | } 14 | } 15 | 16 | function posts(state = { 17 | isFetching: false, 18 | didInvalidate: false, 19 | items: [] 20 | }, action) { 21 | switch (action.type) { 22 | case INVALIDATE_REDDIT: 23 | return Object.assign({}, state, { 24 | didInvalidate: true 25 | }) 26 | case REQUEST_POSTS: 27 | return Object.assign({}, state, { 28 | isFetching: true, 29 | didInvalidate: false 30 | }) 31 | case RECEIVE_POSTS: 32 | return Object.assign({}, state, { 33 | isFetching: false, 34 | didInvalidate: false, 35 | items: action.posts, 36 | lastUpdated: action.receivedAt 37 | }) 38 | default: 39 | return state 40 | } 41 | } 42 | 43 | function postsByReddit(state = { }, action) { 44 | switch (action.type) { 45 | case INVALIDATE_REDDIT: 46 | case RECEIVE_POSTS: 47 | case REQUEST_POSTS: 48 | return Object.assign({}, state, { 49 | [action.reddit]: posts(state[action.reddit], action) 50 | }) 51 | default: 52 | return state 53 | } 54 | } 55 | 56 | const rootReducer = combineReducers({ 57 | postsByReddit, 58 | selectedReddit 59 | }) 60 | 61 | export default rootReducer 62 | -------------------------------------------------------------------------------- /example/selectors/index.js: -------------------------------------------------------------------------------- 1 | import { PropTypes } from 'react' 2 | 3 | export const selectedReddit = state => state.selectedReddit 4 | selectedReddit.propType = PropTypes.string.isRequired 5 | 6 | export const postsByReddit = state => state.postsByReddit 7 | postsByReddit.propType = PropTypes.object.isRequired 8 | 9 | export const posts = state => { 10 | const p = state.postsByReddit[selectedReddit(state)] 11 | return p && p.items ? p.items : [] 12 | } 13 | posts.propType = PropTypes.array.isRequired 14 | 15 | export const isFetching = state => { 16 | const posts = state.postsByReddit[selectedReddit(state)] 17 | return posts ? posts.isFetching : true 18 | } 19 | isFetching.propType = PropTypes.bool.isRequired 20 | 21 | export const lastUpdated = state => { 22 | const posts = state.postsByReddit[selectedReddit(state)] 23 | return posts && posts.lastUpdated 24 | } 25 | lastUpdated.propType = PropTypes.number 26 | -------------------------------------------------------------------------------- /example/server.js: -------------------------------------------------------------------------------- 1 | var webpack = require('webpack') 2 | var webpackDevMiddleware = require('webpack-dev-middleware') 3 | var webpackHotMiddleware = require('webpack-hot-middleware') 4 | var config = require('./webpack.config') 5 | 6 | var app = new (require('express'))() 7 | var port = 3000 8 | 9 | var compiler = webpack(config) 10 | app.use(webpackDevMiddleware(compiler, { noInfo: true, publicPath: config.output.publicPath })) 11 | app.use(webpackHotMiddleware(compiler)) 12 | 13 | app.get("/", function(req, res) { 14 | res.sendFile(__dirname + '/index.html') 15 | }) 16 | 17 | app.listen(port, function(error) { 18 | if (error) { 19 | console.error(error) 20 | } else { 21 | console.info("==> 🌎 Listening on port %s. Open up http://localhost:%s/ in your browser.", port, port) 22 | } 23 | }) 24 | -------------------------------------------------------------------------------- /example/store/configureStore.js: -------------------------------------------------------------------------------- 1 | import { createStore, applyMiddleware } from 'redux' 2 | import createLogger from 'redux-logger' 3 | import rootReducer from '../reducers' 4 | 5 | const createStoreWithMiddleware = applyMiddleware( 6 | createLogger() 7 | )(createStore) 8 | 9 | export default function configureStore(initialState) { 10 | const store = createStoreWithMiddleware(rootReducer, initialState) 11 | 12 | if (module.hot) { 13 | // Enable Webpack hot module replacement for reducers 14 | module.hot.accept('../reducers', () => { 15 | const nextRootReducer = require('../reducers') 16 | store.replaceReducer(nextRootReducer) 17 | }) 18 | } 19 | 20 | return store 21 | } 22 | -------------------------------------------------------------------------------- /example/webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var webpack = require('webpack') 3 | 4 | module.exports = { 5 | devtool: 'eval', 6 | entry: [ 7 | 'webpack-hot-middleware/client', 8 | './index' 9 | ], 10 | output: { 11 | path: path.join(__dirname, 'dist'), 12 | filename: 'bundle.js', 13 | publicPath: '/static/' 14 | }, 15 | plugins: [ 16 | new webpack.optimize.OccurenceOrderPlugin(), 17 | new webpack.HotModuleReplacementPlugin(), 18 | new webpack.NoErrorsPlugin() 19 | ], 20 | module: { 21 | loaders: [{ 22 | test: /\.js$/, 23 | loaders: ['babel'], 24 | exclude: /node_modules/, 25 | include: __dirname 26 | }] 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-redux-controller", 3 | "version": "0.3.0", 4 | "description": "Library for creating a controller layer to link React and Redux.", 5 | "license": "MIT", 6 | "keywords": [ 7 | "controller", 8 | "react", 9 | "redux" 10 | ], 11 | "repository": { 12 | "type": "git", 13 | "url": "git://github.com/artsy/react-redux-controller.git" 14 | }, 15 | "author": { 16 | "name": "Alan Johnson", 17 | "email": "alan@breakrs.com" 18 | }, 19 | "engines": { 20 | "node": ">= 5.1.x" 21 | }, 22 | "main": "lib/index.js", 23 | "scripts": { 24 | "build": "mkdir -p lib && babel ./src --out-dir ./lib", 25 | "prepublish": "npm run build" 26 | }, 27 | "dependencies": { 28 | "co": "^4.6.0" 29 | }, 30 | "devDependencies": { 31 | "babel-cli": "^6.3.17", 32 | "babel-core": "^6.3.21", 33 | "babel-loader": "^6.2.0", 34 | "babel-polyfill": "^6.3.14", 35 | "babel-preset-es2015": "^6.3.13", 36 | "babel-preset-es2015-loose": "^6.1.3", 37 | "babel-preset-react": "^6.3.13", 38 | "co": "^4.6.0", 39 | "mocha": "*", 40 | "prop-types": "^15.6.0", 41 | "react": "^16.1.1", 42 | "react-redux": "^4.0.0", 43 | "redux": "^3.0.0", 44 | "should": "*", 45 | "webpack": "^1.12.9" 46 | }, 47 | "files": [ 48 | "dist", 49 | "lib", 50 | "src" 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | import co from 'co'; 4 | import { aggregateSelectors } from './selector_utils'; 5 | import { mapObj, pick, merge, mergeAll } from './utils'; 6 | import { connect } from 'react-redux'; 7 | 8 | const toDispatchSymbol = Symbol('toDispatch'); 9 | 10 | /** Request to get the props object at a specific time */ 11 | export const getProps = Symbol('getProps'); 12 | 13 | /** 14 | * Request to get a function that will return the controller `props` object, 15 | * when called. 16 | */ 17 | export const getPropsGetter = Symbol('getPropsGetter'); 18 | 19 | /** 20 | * Conveniece request to dispatch an action directly from a controller 21 | * generator. 22 | * @param {*} action a Redux action 23 | * @return {*} the result of dispatching the action 24 | */ 25 | export function toDispatch(action) { 26 | return { [toDispatchSymbol]: action }; 27 | } 28 | 29 | /** 30 | * The default function for converting the controllerGenerators to methods that 31 | * can be directly called. It resolves `yield` statements in the generators by 32 | * delegating Promise to `co` and processing special values that are used to 33 | * request data from the controller. 34 | * @param {Function} propsGetter gets the current controller props. 35 | * @return {GeneratorToMethod} a function that converts a generator to a method 36 | * forwarding on the arguments the generator receives. 37 | */ 38 | export function runControllerGenerator(propsGetter) { 39 | return controllerGenerator => co.wrap(function* coWrapper() { 40 | const gen = controllerGenerator.apply(this, arguments); 41 | let value; 42 | let done; 43 | let toController; 44 | 45 | for ({ value, done } = gen.next(); !done; { value, done } = gen.next(toController)) { 46 | const props = propsGetter(); 47 | 48 | // In the special cases that the yielded value has one of our special 49 | // tags, process it, and then we'll send the result on to `co` anyway 50 | // in case whatever we get back is a promise. 51 | if (value && value[toDispatchSymbol]) { 52 | // Dispatch an action 53 | toController = props.dispatch(value[toDispatchSymbol]); 54 | } else if (value === getProps) { 55 | // Return all props 56 | toController = props; 57 | } else if (value === getPropsGetter) { 58 | // Return the propsGetter itself, so the controller can get props 59 | // values in async continuations 60 | toController = propsGetter; 61 | } else { 62 | // Defer to `co` 63 | toController = yield value; 64 | } 65 | } 66 | 67 | return value; 68 | }); 69 | } 70 | 71 | /** 72 | * This higher-order component introduces a concept of a Controller, which is a 73 | * component that acts as an interface between the proper view component tree 74 | * and the Redux state modeling, building upon react-redux. It attempts to 75 | * solve a couple problems: 76 | * 77 | * - It provides a way for event handlers and other helpers to access the 78 | * application state and dispatch actions to Redux. 79 | * - It conveys those handlers, along with the data from the react-redux 80 | * selectors, to the component tree, using React's [context](bit.ly/1QWHEfC) 81 | * feature. 82 | * 83 | * It was designed to help keep UI components as simple and domain-focused 84 | * as possible (i.e. [dumb components](bit.ly/1RFh7Ui), while concentrating 85 | * the React-Redux integration point at a single place. It frees intermediate 86 | * components from the concern of routing dependencies to their descendents, 87 | * reducing coupling of components to the UI layout. 88 | * 89 | * @param {React.Component} RootComponent is the root of the app's component 90 | * tree. 91 | * @param {Object} controllerGenerators contains generator methods to be used 92 | * to create controller methods, which are distributed to the component tree. 93 | * These are called from UI components to trigger state changes. These 94 | * generators can `yield` Promises to be resolved via `co`, can `yield` 95 | * requests to receive application state or dispatch actions, and can 96 | * `yield*` to delegate to other controller generators. 97 | * @param {(Object|Object[])} selectorBundles maps property names to selector 98 | * functions, which produce property value from the Redux store. 99 | * @param {Function} [controllerGeneratorRunner = runControllerGenerator] is 100 | * the generator wrapper that will be used to run the generator methods. 101 | * @return {React.Component} a decorated version of RootComponent, with 102 | * `context` set up for its descendents. 103 | */ 104 | export function controller(RootComponent, controllerGenerators, selectorBundles, controllerGeneratorRunner = runControllerGenerator) { 105 | // Combine selector bundles into one mapStateToProps function. 106 | const mapStateToProps = aggregateSelectors(mergeAll(selectorBundles)); 107 | const selectorPropTypes = mapStateToProps.propTypes; 108 | 109 | // All the controller method propTypes should simply be "function" so we can 110 | // synthensize those. 111 | const controllerMethodPropTypes = mapObj(() => PropTypes.func.isRequired, controllerGenerators); 112 | 113 | // Declare the availability of all of the selectors and controller methods 114 | // in the React context for descendant components. 115 | const contextPropTypes = merge(selectorPropTypes, controllerMethodPropTypes); 116 | 117 | class Controller extends React.Component { 118 | constructor(...constructorArgs) { 119 | super(...constructorArgs); 120 | 121 | const injectedControllerGeneratorRunner = controllerGeneratorRunner(() => this.props); 122 | this.controllerMethods = mapObj(controllerGenerator => 123 | injectedControllerGeneratorRunner(controllerGenerator) 124 | , controllerGenerators); 125 | 126 | // Ensure controller methods can access each other via `this` 127 | for (const methodName of Object.keys(this.controllerMethods)) { 128 | this.controllerMethods[methodName] = this.controllerMethods[methodName].bind(this.controllerMethods); 129 | } 130 | } 131 | 132 | componentWillMount() { 133 | if (this.controllerMethods.initialize) { this.controllerMethods.initialize(); } 134 | } 135 | 136 | getChildContext() { 137 | // Rather than injecting all of the RootComponent props into the context, 138 | // we only explictly pass selector and controller method props. 139 | const selectorProps = pick(Object.keys(selectorPropTypes), this.props); 140 | const childContext = merge(selectorProps, this.controllerMethods); 141 | return childContext; 142 | } 143 | 144 | render() { 145 | return ( 146 | 147 | ); 148 | } 149 | } 150 | 151 | Controller.propTypes = merge(selectorPropTypes, RootComponent.propTypes || {}); 152 | Controller.childContextTypes = contextPropTypes; 153 | 154 | return connect(mapStateToProps)(Controller); 155 | } 156 | -------------------------------------------------------------------------------- /src/selector_utils.js: -------------------------------------------------------------------------------- 1 | import { mapObj } from './utils'; 2 | 3 | /** 4 | * Combines bundle of selector functions into a single super selector function 5 | * maps the state to extracts a set of property name-value pairs corresponding 6 | * to the selector function outputs. The selectors materialize a view of the 7 | * Redux store, which will be fed to React components as `props`. 8 | * 9 | * A selector bundle looks like: 10 | * 11 | * { 12 | * selectorName: (state) => value, 13 | * ... 14 | * } 15 | * 16 | * , where each selector function should carry a `propType` property, 17 | * describing its result. 18 | * 19 | * The resulting super selector function looks like: 20 | * 21 | * state => { 22 | * selectorName: value, 23 | * ... 24 | * } 25 | * 26 | * , and has a `propTypes` property of the form: 27 | * 28 | * { 29 | * selectorName: propType, 30 | * ... 31 | * } 32 | * 33 | * This property can be merged directly into a `propTypes` or `contextTypes` 34 | * property on a React component. 35 | * 36 | * A bundle is typically created by importing an entire module of exported 37 | * selector functions. To keep track of React prop types, selector functions 38 | * should be annotated by assigning a `propType` property to the function 39 | * within the module where it is declared. 40 | * 41 | * @param {Object.} selectorBundles contains the 42 | * selectors, as explained above. 43 | * @return {Function} a function that, when given the store state, produces all 44 | * of the selector outputs. 45 | */ 46 | export function aggregateSelectors(bundle) { 47 | const combinedSelector = state => mapObj(selectorFunction => selectorFunction(state), bundle); 48 | combinedSelector.propTypes = mapObj(selectorFunction => selectorFunction.propType, bundle); 49 | return combinedSelector; 50 | } 51 | 52 | /** 53 | * Does the opposite of [[aggregateSelectors]] 54 | * 55 | * @param {Function} superSelector 56 | * @return {Object.} a selector bundle, with each selector 57 | * annotated with a propType property. 58 | */ 59 | export function disaggregateSuperSelector(superSelector) { 60 | return mapObj((propType, propName) => { 61 | const singleSelector = store => superSelector(store)[propName]; 62 | singleSelector.propType = propType; 63 | return singleSelector; 64 | }, superSelector.propTypes); 65 | } 66 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Map, but for objects. Creates an object with the same keys as `obj` and values 3 | * generated by running each property of `obj` through `fn`. `fn` is passed three arguments: *(value, key, obj)*. 4 | * @param {Function} fn A function called for each property in `obj`. Its return value will 5 | * become a new property on the return object. 6 | * @param {Object} obj The object to iterate over. 7 | * @return {Object} A new object with the same keys as `obj` and values that are the result 8 | * of running each property through `fn`. 9 | */ 10 | export function mapObj(fn, obj) { 11 | const result = {}; 12 | 13 | const keys = Object.keys(obj); 14 | 15 | for (let i = 0; i < keys.length; ++i) { 16 | result[keys[i]] = fn(obj[keys[i]], keys[i], obj); 17 | } 18 | 19 | return result; 20 | } 21 | 22 | /** 23 | * Returns a partial copy of an object containing only the keys specified. If the key does not exist, the 24 | * property is ignored. 25 | * @param {String[]} keys An array of String property names to copy onto a new object. 26 | * @param {Object} obj The object to copy from. 27 | * @return {Object} A new object with only properties from `keys` on it. 28 | */ 29 | export function pick(keys, obj) { 30 | const result = {}; 31 | 32 | for (let i = 0; i < keys.length; ++i) { 33 | if (keys[i] in obj) { 34 | result[keys[i]] = obj[keys[i]]; 35 | } 36 | } 37 | 38 | return result; 39 | } 40 | 41 | /** 42 | * Create a new object with the own properties of `a` 43 | * merged with the own properties of object `b`. 44 | * @param {Object} a The first object. 45 | * @param {Object} b The second object. 46 | * @return {Object} A merged object. 47 | */ 48 | export function merge(a, b) { 49 | const result = {}; 50 | 51 | for (let i = 0, keys = Object.keys(a); i < keys.length; ++i) { 52 | result[keys[i]] = a[keys[i]]; 53 | } 54 | 55 | for (let i = 0, keys = Object.keys(b); i < keys.length; ++i) { 56 | result[keys[i]] = b[keys[i]]; 57 | } 58 | 59 | return result; 60 | } 61 | 62 | /** 63 | * Merges a list of objects together into one object. 64 | * @param {Object|Object[]} objs An array of objects or a single object. 65 | * @return {Object} A merged object. 66 | */ 67 | export function mergeAll(objs) { 68 | const list = Array.isArray(objs) ? objs : [objs]; 69 | 70 | const result = {}; 71 | 72 | for (let i = 0; i < list.length; ++i) { 73 | const keys = Object.keys(list[i]); 74 | 75 | for (let j = 0; j < keys.length; ++j) { 76 | result[keys[j]] = list[i][keys[j]]; 77 | } 78 | } 79 | 80 | return result; 81 | } 82 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | abbrev@1: 6 | version "1.1.1" 7 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 8 | 9 | acorn@^3.0.0: 10 | version "3.3.0" 11 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 12 | 13 | ajv@^4.9.1: 14 | version "4.11.8" 15 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" 16 | dependencies: 17 | co "^4.6.0" 18 | json-stable-stringify "^1.0.1" 19 | 20 | align-text@^0.1.1, align-text@^0.1.3: 21 | version "0.1.4" 22 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" 23 | dependencies: 24 | kind-of "^3.0.2" 25 | longest "^1.0.1" 26 | repeat-string "^1.5.2" 27 | 28 | amdefine@>=0.0.4: 29 | version "1.0.1" 30 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 31 | 32 | ansi-regex@^2.0.0: 33 | version "2.1.1" 34 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 35 | 36 | ansi-styles@^2.2.1: 37 | version "2.2.1" 38 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 39 | 40 | anymatch@^1.3.0: 41 | version "1.3.2" 42 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" 43 | dependencies: 44 | micromatch "^2.1.5" 45 | normalize-path "^2.0.0" 46 | 47 | aproba@^1.0.3: 48 | version "1.2.0" 49 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 50 | 51 | are-we-there-yet@~1.1.2: 52 | version "1.1.4" 53 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" 54 | dependencies: 55 | delegates "^1.0.0" 56 | readable-stream "^2.0.6" 57 | 58 | arr-diff@^2.0.0: 59 | version "2.0.0" 60 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 61 | dependencies: 62 | arr-flatten "^1.0.1" 63 | 64 | arr-flatten@^1.0.1: 65 | version "1.1.0" 66 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 67 | 68 | array-unique@^0.2.1: 69 | version "0.2.1" 70 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 71 | 72 | asap@~2.0.3: 73 | version "2.0.6" 74 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 75 | 76 | asn1@~0.2.3: 77 | version "0.2.3" 78 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 79 | 80 | assert-plus@1.0.0, assert-plus@^1.0.0: 81 | version "1.0.0" 82 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 83 | 84 | assert-plus@^0.2.0: 85 | version "0.2.0" 86 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 87 | 88 | assert@^1.1.1: 89 | version "1.4.1" 90 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" 91 | dependencies: 92 | util "0.10.3" 93 | 94 | async-each@^1.0.0: 95 | version "1.0.1" 96 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 97 | 98 | async@^0.9.0: 99 | version "0.9.2" 100 | resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" 101 | 102 | async@^1.3.0: 103 | version "1.5.2" 104 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 105 | 106 | async@~0.2.6: 107 | version "0.2.10" 108 | resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" 109 | 110 | asynckit@^0.4.0: 111 | version "0.4.0" 112 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 113 | 114 | aws-sign2@~0.6.0: 115 | version "0.6.0" 116 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 117 | 118 | aws4@^1.2.1: 119 | version "1.6.0" 120 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 121 | 122 | babel-cli@^6.3.17: 123 | version "6.26.0" 124 | resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" 125 | dependencies: 126 | babel-core "^6.26.0" 127 | babel-polyfill "^6.26.0" 128 | babel-register "^6.26.0" 129 | babel-runtime "^6.26.0" 130 | commander "^2.11.0" 131 | convert-source-map "^1.5.0" 132 | fs-readdir-recursive "^1.0.0" 133 | glob "^7.1.2" 134 | lodash "^4.17.4" 135 | output-file-sync "^1.1.2" 136 | path-is-absolute "^1.0.1" 137 | slash "^1.0.0" 138 | source-map "^0.5.6" 139 | v8flags "^2.1.1" 140 | optionalDependencies: 141 | chokidar "^1.6.1" 142 | 143 | babel-code-frame@^6.26.0: 144 | version "6.26.0" 145 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 146 | dependencies: 147 | chalk "^1.1.3" 148 | esutils "^2.0.2" 149 | js-tokens "^3.0.2" 150 | 151 | babel-core@^6.26.0, babel-core@^6.3.21: 152 | version "6.26.0" 153 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" 154 | dependencies: 155 | babel-code-frame "^6.26.0" 156 | babel-generator "^6.26.0" 157 | babel-helpers "^6.24.1" 158 | babel-messages "^6.23.0" 159 | babel-register "^6.26.0" 160 | babel-runtime "^6.26.0" 161 | babel-template "^6.26.0" 162 | babel-traverse "^6.26.0" 163 | babel-types "^6.26.0" 164 | babylon "^6.18.0" 165 | convert-source-map "^1.5.0" 166 | debug "^2.6.8" 167 | json5 "^0.5.1" 168 | lodash "^4.17.4" 169 | minimatch "^3.0.4" 170 | path-is-absolute "^1.0.1" 171 | private "^0.1.7" 172 | slash "^1.0.0" 173 | source-map "^0.5.6" 174 | 175 | babel-generator@^6.26.0: 176 | version "6.26.0" 177 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" 178 | dependencies: 179 | babel-messages "^6.23.0" 180 | babel-runtime "^6.26.0" 181 | babel-types "^6.26.0" 182 | detect-indent "^4.0.0" 183 | jsesc "^1.3.0" 184 | lodash "^4.17.4" 185 | source-map "^0.5.6" 186 | trim-right "^1.0.1" 187 | 188 | babel-helper-builder-react-jsx@^6.24.1: 189 | version "6.26.0" 190 | resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" 191 | dependencies: 192 | babel-runtime "^6.26.0" 193 | babel-types "^6.26.0" 194 | esutils "^2.0.2" 195 | 196 | babel-helper-call-delegate@^6.24.1: 197 | version "6.24.1" 198 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" 199 | dependencies: 200 | babel-helper-hoist-variables "^6.24.1" 201 | babel-runtime "^6.22.0" 202 | babel-traverse "^6.24.1" 203 | babel-types "^6.24.1" 204 | 205 | babel-helper-define-map@^6.24.1: 206 | version "6.26.0" 207 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" 208 | dependencies: 209 | babel-helper-function-name "^6.24.1" 210 | babel-runtime "^6.26.0" 211 | babel-types "^6.26.0" 212 | lodash "^4.17.4" 213 | 214 | babel-helper-function-name@^6.24.1: 215 | version "6.24.1" 216 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" 217 | dependencies: 218 | babel-helper-get-function-arity "^6.24.1" 219 | babel-runtime "^6.22.0" 220 | babel-template "^6.24.1" 221 | babel-traverse "^6.24.1" 222 | babel-types "^6.24.1" 223 | 224 | babel-helper-get-function-arity@^6.24.1: 225 | version "6.24.1" 226 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" 227 | dependencies: 228 | babel-runtime "^6.22.0" 229 | babel-types "^6.24.1" 230 | 231 | babel-helper-hoist-variables@^6.24.1: 232 | version "6.24.1" 233 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" 234 | dependencies: 235 | babel-runtime "^6.22.0" 236 | babel-types "^6.24.1" 237 | 238 | babel-helper-optimise-call-expression@^6.24.1: 239 | version "6.24.1" 240 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" 241 | dependencies: 242 | babel-runtime "^6.22.0" 243 | babel-types "^6.24.1" 244 | 245 | babel-helper-regex@^6.24.1: 246 | version "6.26.0" 247 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" 248 | dependencies: 249 | babel-runtime "^6.26.0" 250 | babel-types "^6.26.0" 251 | lodash "^4.17.4" 252 | 253 | babel-helper-replace-supers@^6.24.1: 254 | version "6.24.1" 255 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" 256 | dependencies: 257 | babel-helper-optimise-call-expression "^6.24.1" 258 | babel-messages "^6.23.0" 259 | babel-runtime "^6.22.0" 260 | babel-template "^6.24.1" 261 | babel-traverse "^6.24.1" 262 | babel-types "^6.24.1" 263 | 264 | babel-helpers@^6.24.1: 265 | version "6.24.1" 266 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 267 | dependencies: 268 | babel-runtime "^6.22.0" 269 | babel-template "^6.24.1" 270 | 271 | babel-loader@^6.2.0: 272 | version "6.4.1" 273 | resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca" 274 | dependencies: 275 | find-cache-dir "^0.1.1" 276 | loader-utils "^0.2.16" 277 | mkdirp "^0.5.1" 278 | object-assign "^4.0.1" 279 | 280 | babel-messages@^6.23.0: 281 | version "6.23.0" 282 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 283 | dependencies: 284 | babel-runtime "^6.22.0" 285 | 286 | babel-plugin-check-es2015-constants@^6.22.0: 287 | version "6.22.0" 288 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" 289 | dependencies: 290 | babel-runtime "^6.22.0" 291 | 292 | babel-plugin-syntax-flow@^6.18.0: 293 | version "6.18.0" 294 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" 295 | 296 | babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: 297 | version "6.18.0" 298 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" 299 | 300 | babel-plugin-transform-es2015-arrow-functions@^6.22.0, babel-plugin-transform-es2015-arrow-functions@^6.3.13: 301 | version "6.22.0" 302 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" 303 | dependencies: 304 | babel-runtime "^6.22.0" 305 | 306 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0, babel-plugin-transform-es2015-block-scoped-functions@^6.3.13: 307 | version "6.22.0" 308 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" 309 | dependencies: 310 | babel-runtime "^6.22.0" 311 | 312 | babel-plugin-transform-es2015-block-scoping@^6.24.1, babel-plugin-transform-es2015-block-scoping@^6.3.13: 313 | version "6.26.0" 314 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" 315 | dependencies: 316 | babel-runtime "^6.26.0" 317 | babel-template "^6.26.0" 318 | babel-traverse "^6.26.0" 319 | babel-types "^6.26.0" 320 | lodash "^4.17.4" 321 | 322 | babel-plugin-transform-es2015-classes@^6.24.1, babel-plugin-transform-es2015-classes@^6.3.15: 323 | version "6.24.1" 324 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" 325 | dependencies: 326 | babel-helper-define-map "^6.24.1" 327 | babel-helper-function-name "^6.24.1" 328 | babel-helper-optimise-call-expression "^6.24.1" 329 | babel-helper-replace-supers "^6.24.1" 330 | babel-messages "^6.23.0" 331 | babel-runtime "^6.22.0" 332 | babel-template "^6.24.1" 333 | babel-traverse "^6.24.1" 334 | babel-types "^6.24.1" 335 | 336 | babel-plugin-transform-es2015-computed-properties@^6.24.1, babel-plugin-transform-es2015-computed-properties@^6.3.13: 337 | version "6.24.1" 338 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" 339 | dependencies: 340 | babel-runtime "^6.22.0" 341 | babel-template "^6.24.1" 342 | 343 | babel-plugin-transform-es2015-constants@^6.1.4: 344 | version "6.1.4" 345 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-constants/-/babel-plugin-transform-es2015-constants-6.1.4.tgz#e4b8c78fb48ab98b0107f329fab6040e79c35a33" 346 | dependencies: 347 | babel-runtime "^5.0.0" 348 | 349 | babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.3.15: 350 | version "6.23.0" 351 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" 352 | dependencies: 353 | babel-runtime "^6.22.0" 354 | 355 | babel-plugin-transform-es2015-duplicate-keys@^6.24.1: 356 | version "6.24.1" 357 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" 358 | dependencies: 359 | babel-runtime "^6.22.0" 360 | babel-types "^6.24.1" 361 | 362 | babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.3.13: 363 | version "6.23.0" 364 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" 365 | dependencies: 366 | babel-runtime "^6.22.0" 367 | 368 | babel-plugin-transform-es2015-function-name@^6.24.1, babel-plugin-transform-es2015-function-name@^6.3.21: 369 | version "6.24.1" 370 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" 371 | dependencies: 372 | babel-helper-function-name "^6.24.1" 373 | babel-runtime "^6.22.0" 374 | babel-types "^6.24.1" 375 | 376 | babel-plugin-transform-es2015-literals@^6.22.0, babel-plugin-transform-es2015-literals@^6.3.13: 377 | version "6.22.0" 378 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" 379 | dependencies: 380 | babel-runtime "^6.22.0" 381 | 382 | babel-plugin-transform-es2015-modules-amd@^6.24.1: 383 | version "6.24.1" 384 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" 385 | dependencies: 386 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 387 | babel-runtime "^6.22.0" 388 | babel-template "^6.24.1" 389 | 390 | babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.3.16: 391 | version "6.26.0" 392 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" 393 | dependencies: 394 | babel-plugin-transform-strict-mode "^6.24.1" 395 | babel-runtime "^6.26.0" 396 | babel-template "^6.26.0" 397 | babel-types "^6.26.0" 398 | 399 | babel-plugin-transform-es2015-modules-systemjs@^6.24.1: 400 | version "6.24.1" 401 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" 402 | dependencies: 403 | babel-helper-hoist-variables "^6.24.1" 404 | babel-runtime "^6.22.0" 405 | babel-template "^6.24.1" 406 | 407 | babel-plugin-transform-es2015-modules-umd@^6.24.1: 408 | version "6.24.1" 409 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" 410 | dependencies: 411 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 412 | babel-runtime "^6.22.0" 413 | babel-template "^6.24.1" 414 | 415 | babel-plugin-transform-es2015-object-super@^6.24.1, babel-plugin-transform-es2015-object-super@^6.3.13: 416 | version "6.24.1" 417 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" 418 | dependencies: 419 | babel-helper-replace-supers "^6.24.1" 420 | babel-runtime "^6.22.0" 421 | 422 | babel-plugin-transform-es2015-parameters@^6.24.1, babel-plugin-transform-es2015-parameters@^6.3.26: 423 | version "6.24.1" 424 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" 425 | dependencies: 426 | babel-helper-call-delegate "^6.24.1" 427 | babel-helper-get-function-arity "^6.24.1" 428 | babel-runtime "^6.22.0" 429 | babel-template "^6.24.1" 430 | babel-traverse "^6.24.1" 431 | babel-types "^6.24.1" 432 | 433 | babel-plugin-transform-es2015-shorthand-properties@^6.24.1, babel-plugin-transform-es2015-shorthand-properties@^6.3.13: 434 | version "6.24.1" 435 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" 436 | dependencies: 437 | babel-runtime "^6.22.0" 438 | babel-types "^6.24.1" 439 | 440 | babel-plugin-transform-es2015-spread@^6.22.0, babel-plugin-transform-es2015-spread@^6.3.14: 441 | version "6.22.0" 442 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" 443 | dependencies: 444 | babel-runtime "^6.22.0" 445 | 446 | babel-plugin-transform-es2015-sticky-regex@^6.24.1, babel-plugin-transform-es2015-sticky-regex@^6.3.13: 447 | version "6.24.1" 448 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" 449 | dependencies: 450 | babel-helper-regex "^6.24.1" 451 | babel-runtime "^6.22.0" 452 | babel-types "^6.24.1" 453 | 454 | babel-plugin-transform-es2015-template-literals@^6.22.0, babel-plugin-transform-es2015-template-literals@^6.3.13: 455 | version "6.22.0" 456 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" 457 | dependencies: 458 | babel-runtime "^6.22.0" 459 | 460 | babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.3.13: 461 | version "6.23.0" 462 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" 463 | dependencies: 464 | babel-runtime "^6.22.0" 465 | 466 | babel-plugin-transform-es2015-unicode-regex@^6.24.1, babel-plugin-transform-es2015-unicode-regex@^6.3.13: 467 | version "6.24.1" 468 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" 469 | dependencies: 470 | babel-helper-regex "^6.24.1" 471 | babel-runtime "^6.22.0" 472 | regexpu-core "^2.0.0" 473 | 474 | babel-plugin-transform-flow-strip-types@^6.22.0: 475 | version "6.22.0" 476 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" 477 | dependencies: 478 | babel-plugin-syntax-flow "^6.18.0" 479 | babel-runtime "^6.22.0" 480 | 481 | babel-plugin-transform-react-display-name@^6.23.0: 482 | version "6.25.0" 483 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" 484 | dependencies: 485 | babel-runtime "^6.22.0" 486 | 487 | babel-plugin-transform-react-jsx-self@^6.22.0: 488 | version "6.22.0" 489 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" 490 | dependencies: 491 | babel-plugin-syntax-jsx "^6.8.0" 492 | babel-runtime "^6.22.0" 493 | 494 | babel-plugin-transform-react-jsx-source@^6.22.0: 495 | version "6.22.0" 496 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" 497 | dependencies: 498 | babel-plugin-syntax-jsx "^6.8.0" 499 | babel-runtime "^6.22.0" 500 | 501 | babel-plugin-transform-react-jsx@^6.24.1: 502 | version "6.24.1" 503 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" 504 | dependencies: 505 | babel-helper-builder-react-jsx "^6.24.1" 506 | babel-plugin-syntax-jsx "^6.8.0" 507 | babel-runtime "^6.22.0" 508 | 509 | babel-plugin-transform-regenerator@^6.24.1, babel-plugin-transform-regenerator@^6.3.26: 510 | version "6.26.0" 511 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" 512 | dependencies: 513 | regenerator-transform "^0.10.0" 514 | 515 | babel-plugin-transform-strict-mode@^6.24.1: 516 | version "6.24.1" 517 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" 518 | dependencies: 519 | babel-runtime "^6.22.0" 520 | babel-types "^6.24.1" 521 | 522 | babel-polyfill@^6.26.0, babel-polyfill@^6.3.14: 523 | version "6.26.0" 524 | resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" 525 | dependencies: 526 | babel-runtime "^6.26.0" 527 | core-js "^2.5.0" 528 | regenerator-runtime "^0.10.5" 529 | 530 | babel-preset-es2015-loose@^6.1.3: 531 | version "6.1.4" 532 | resolved "https://registry.yarnpkg.com/babel-preset-es2015-loose/-/babel-preset-es2015-loose-6.1.4.tgz#33939d9e39c5acf8469fb3c77e325548c93447ff" 533 | dependencies: 534 | babel-plugin-transform-es2015-arrow-functions "^6.3.13" 535 | babel-plugin-transform-es2015-block-scoped-functions "^6.3.13" 536 | babel-plugin-transform-es2015-block-scoping "^6.3.13" 537 | babel-plugin-transform-es2015-classes "^6.3.15" 538 | babel-plugin-transform-es2015-computed-properties "^6.3.13" 539 | babel-plugin-transform-es2015-constants "^6.1.4" 540 | babel-plugin-transform-es2015-destructuring "^6.3.15" 541 | babel-plugin-transform-es2015-for-of "^6.3.13" 542 | babel-plugin-transform-es2015-function-name "^6.3.21" 543 | babel-plugin-transform-es2015-literals "^6.3.13" 544 | babel-plugin-transform-es2015-modules-commonjs "^6.3.16" 545 | babel-plugin-transform-es2015-object-super "^6.3.13" 546 | babel-plugin-transform-es2015-parameters "^6.3.26" 547 | babel-plugin-transform-es2015-shorthand-properties "^6.3.13" 548 | babel-plugin-transform-es2015-spread "^6.3.14" 549 | babel-plugin-transform-es2015-sticky-regex "^6.3.13" 550 | babel-plugin-transform-es2015-template-literals "^6.3.13" 551 | babel-plugin-transform-es2015-typeof-symbol "^6.3.13" 552 | babel-plugin-transform-es2015-unicode-regex "^6.3.13" 553 | babel-plugin-transform-regenerator "^6.3.26" 554 | 555 | babel-preset-es2015@^6.3.13: 556 | version "6.24.1" 557 | resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" 558 | dependencies: 559 | babel-plugin-check-es2015-constants "^6.22.0" 560 | babel-plugin-transform-es2015-arrow-functions "^6.22.0" 561 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" 562 | babel-plugin-transform-es2015-block-scoping "^6.24.1" 563 | babel-plugin-transform-es2015-classes "^6.24.1" 564 | babel-plugin-transform-es2015-computed-properties "^6.24.1" 565 | babel-plugin-transform-es2015-destructuring "^6.22.0" 566 | babel-plugin-transform-es2015-duplicate-keys "^6.24.1" 567 | babel-plugin-transform-es2015-for-of "^6.22.0" 568 | babel-plugin-transform-es2015-function-name "^6.24.1" 569 | babel-plugin-transform-es2015-literals "^6.22.0" 570 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 571 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 572 | babel-plugin-transform-es2015-modules-systemjs "^6.24.1" 573 | babel-plugin-transform-es2015-modules-umd "^6.24.1" 574 | babel-plugin-transform-es2015-object-super "^6.24.1" 575 | babel-plugin-transform-es2015-parameters "^6.24.1" 576 | babel-plugin-transform-es2015-shorthand-properties "^6.24.1" 577 | babel-plugin-transform-es2015-spread "^6.22.0" 578 | babel-plugin-transform-es2015-sticky-regex "^6.24.1" 579 | babel-plugin-transform-es2015-template-literals "^6.22.0" 580 | babel-plugin-transform-es2015-typeof-symbol "^6.22.0" 581 | babel-plugin-transform-es2015-unicode-regex "^6.24.1" 582 | babel-plugin-transform-regenerator "^6.24.1" 583 | 584 | babel-preset-flow@^6.23.0: 585 | version "6.23.0" 586 | resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" 587 | dependencies: 588 | babel-plugin-transform-flow-strip-types "^6.22.0" 589 | 590 | babel-preset-react@^6.3.13: 591 | version "6.24.1" 592 | resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" 593 | dependencies: 594 | babel-plugin-syntax-jsx "^6.3.13" 595 | babel-plugin-transform-react-display-name "^6.23.0" 596 | babel-plugin-transform-react-jsx "^6.24.1" 597 | babel-plugin-transform-react-jsx-self "^6.22.0" 598 | babel-plugin-transform-react-jsx-source "^6.22.0" 599 | babel-preset-flow "^6.23.0" 600 | 601 | babel-register@^6.26.0: 602 | version "6.26.0" 603 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" 604 | dependencies: 605 | babel-core "^6.26.0" 606 | babel-runtime "^6.26.0" 607 | core-js "^2.5.0" 608 | home-or-tmp "^2.0.0" 609 | lodash "^4.17.4" 610 | mkdirp "^0.5.1" 611 | source-map-support "^0.4.15" 612 | 613 | babel-runtime@^5.0.0: 614 | version "5.8.38" 615 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-5.8.38.tgz#1c0b02eb63312f5f087ff20450827b425c9d4c19" 616 | dependencies: 617 | core-js "^1.0.0" 618 | 619 | babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: 620 | version "6.26.0" 621 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 622 | dependencies: 623 | core-js "^2.4.0" 624 | regenerator-runtime "^0.11.0" 625 | 626 | babel-template@^6.24.1, babel-template@^6.26.0: 627 | version "6.26.0" 628 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" 629 | dependencies: 630 | babel-runtime "^6.26.0" 631 | babel-traverse "^6.26.0" 632 | babel-types "^6.26.0" 633 | babylon "^6.18.0" 634 | lodash "^4.17.4" 635 | 636 | babel-traverse@^6.24.1, babel-traverse@^6.26.0: 637 | version "6.26.0" 638 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" 639 | dependencies: 640 | babel-code-frame "^6.26.0" 641 | babel-messages "^6.23.0" 642 | babel-runtime "^6.26.0" 643 | babel-types "^6.26.0" 644 | babylon "^6.18.0" 645 | debug "^2.6.8" 646 | globals "^9.18.0" 647 | invariant "^2.2.2" 648 | lodash "^4.17.4" 649 | 650 | babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: 651 | version "6.26.0" 652 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" 653 | dependencies: 654 | babel-runtime "^6.26.0" 655 | esutils "^2.0.2" 656 | lodash "^4.17.4" 657 | to-fast-properties "^1.0.3" 658 | 659 | babylon@^6.18.0: 660 | version "6.18.0" 661 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" 662 | 663 | balanced-match@^1.0.0: 664 | version "1.0.2" 665 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 666 | 667 | base64-js@^1.0.2: 668 | version "1.2.1" 669 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" 670 | 671 | bcrypt-pbkdf@^1.0.0: 672 | version "1.0.1" 673 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 674 | dependencies: 675 | tweetnacl "^0.14.3" 676 | 677 | big.js@^3.1.3: 678 | version "3.2.0" 679 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" 680 | 681 | binary-extensions@^1.0.0: 682 | version "1.10.0" 683 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" 684 | 685 | block-stream@*: 686 | version "0.0.9" 687 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 688 | dependencies: 689 | inherits "~2.0.0" 690 | 691 | boom@2.x.x: 692 | version "2.10.1" 693 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 694 | dependencies: 695 | hoek "2.x.x" 696 | 697 | brace-expansion@^1.1.7: 698 | version "1.1.11" 699 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 700 | dependencies: 701 | balanced-match "^1.0.0" 702 | concat-map "0.0.1" 703 | 704 | braces@^1.8.2: 705 | version "1.8.5" 706 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 707 | dependencies: 708 | expand-range "^1.8.1" 709 | preserve "^0.2.0" 710 | repeat-element "^1.1.2" 711 | 712 | browser-stdout@1.3.0: 713 | version "1.3.0" 714 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 715 | 716 | browserify-aes@0.4.0: 717 | version "0.4.0" 718 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c" 719 | dependencies: 720 | inherits "^2.0.1" 721 | 722 | browserify-zlib@^0.1.4: 723 | version "0.1.4" 724 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" 725 | dependencies: 726 | pako "~0.2.0" 727 | 728 | buffer@^4.9.0: 729 | version "4.9.1" 730 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" 731 | dependencies: 732 | base64-js "^1.0.2" 733 | ieee754 "^1.1.4" 734 | isarray "^1.0.0" 735 | 736 | builtin-status-codes@^3.0.0: 737 | version "3.0.0" 738 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" 739 | 740 | camelcase@^1.0.2: 741 | version "1.2.1" 742 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" 743 | 744 | caseless@~0.12.0: 745 | version "0.12.0" 746 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 747 | 748 | center-align@^0.1.1: 749 | version "0.1.3" 750 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" 751 | dependencies: 752 | align-text "^0.1.3" 753 | lazy-cache "^1.0.3" 754 | 755 | chalk@^1.1.3: 756 | version "1.1.3" 757 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 758 | dependencies: 759 | ansi-styles "^2.2.1" 760 | escape-string-regexp "^1.0.2" 761 | has-ansi "^2.0.0" 762 | strip-ansi "^3.0.0" 763 | supports-color "^2.0.0" 764 | 765 | chokidar@^1.0.0, chokidar@^1.6.1: 766 | version "1.7.0" 767 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" 768 | dependencies: 769 | anymatch "^1.3.0" 770 | async-each "^1.0.0" 771 | glob-parent "^2.0.0" 772 | inherits "^2.0.1" 773 | is-binary-path "^1.0.0" 774 | is-glob "^2.0.0" 775 | path-is-absolute "^1.0.0" 776 | readdirp "^2.0.0" 777 | optionalDependencies: 778 | fsevents "^1.0.0" 779 | 780 | cliui@^2.1.0: 781 | version "2.1.0" 782 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" 783 | dependencies: 784 | center-align "^0.1.1" 785 | right-align "^0.1.1" 786 | wordwrap "0.0.2" 787 | 788 | clone@^1.0.2: 789 | version "1.0.3" 790 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" 791 | 792 | co@^4.6.0: 793 | version "4.6.0" 794 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 795 | 796 | code-point-at@^1.0.0: 797 | version "1.1.0" 798 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 799 | 800 | combined-stream@^1.0.5, combined-stream@~1.0.5: 801 | version "1.0.5" 802 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 803 | dependencies: 804 | delayed-stream "~1.0.0" 805 | 806 | commander@2.11.0, commander@^2.11.0: 807 | version "2.11.0" 808 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" 809 | 810 | commondir@^1.0.1: 811 | version "1.0.1" 812 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 813 | 814 | concat-map@0.0.1: 815 | version "0.0.1" 816 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 817 | 818 | console-browserify@^1.1.0: 819 | version "1.1.0" 820 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" 821 | dependencies: 822 | date-now "^0.1.4" 823 | 824 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 825 | version "1.1.0" 826 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 827 | 828 | constants-browserify@^1.0.0: 829 | version "1.0.0" 830 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" 831 | 832 | convert-source-map@^1.5.0: 833 | version "1.5.0" 834 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" 835 | 836 | core-js@^1.0.0: 837 | version "1.2.7" 838 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" 839 | 840 | core-js@^2.4.0, core-js@^2.5.0: 841 | version "2.5.1" 842 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" 843 | 844 | core-util-is@1.0.2, core-util-is@~1.0.0: 845 | version "1.0.2" 846 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 847 | 848 | create-react-class@^15.5.1: 849 | version "15.6.2" 850 | resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a" 851 | dependencies: 852 | fbjs "^0.8.9" 853 | loose-envify "^1.3.1" 854 | object-assign "^4.1.1" 855 | 856 | cryptiles@2.x.x: 857 | version "2.0.5" 858 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 859 | dependencies: 860 | boom "2.x.x" 861 | 862 | crypto-browserify@3.3.0: 863 | version "3.3.0" 864 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c" 865 | dependencies: 866 | browserify-aes "0.4.0" 867 | pbkdf2-compat "2.0.1" 868 | ripemd160 "0.2.0" 869 | sha.js "2.2.6" 870 | 871 | dashdash@^1.12.0: 872 | version "1.14.1" 873 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 874 | dependencies: 875 | assert-plus "^1.0.0" 876 | 877 | date-now@^0.1.4: 878 | version "0.1.4" 879 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" 880 | 881 | debug@3.1.0: 882 | version "3.1.0" 883 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 884 | dependencies: 885 | ms "2.0.0" 886 | 887 | debug@^2.2.0, debug@^2.6.8: 888 | version "2.6.9" 889 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 890 | dependencies: 891 | ms "2.0.0" 892 | 893 | decamelize@^1.0.0: 894 | version "1.2.0" 895 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 896 | 897 | deep-extend@~0.4.0: 898 | version "0.4.2" 899 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" 900 | 901 | delayed-stream@~1.0.0: 902 | version "1.0.0" 903 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 904 | 905 | delegates@^1.0.0: 906 | version "1.0.0" 907 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 908 | 909 | detect-indent@^4.0.0: 910 | version "4.0.0" 911 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 912 | dependencies: 913 | repeating "^2.0.0" 914 | 915 | detect-libc@^1.0.2: 916 | version "1.0.2" 917 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.2.tgz#71ad5d204bf17a6a6ca8f450c61454066ef461e1" 918 | 919 | diff@3.3.1: 920 | version "3.3.1" 921 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" 922 | 923 | domain-browser@^1.1.1: 924 | version "1.1.7" 925 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" 926 | 927 | ecc-jsbn@~0.1.1: 928 | version "0.1.1" 929 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 930 | dependencies: 931 | jsbn "~0.1.0" 932 | 933 | emojis-list@^2.0.0: 934 | version "2.1.0" 935 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" 936 | 937 | encoding@^0.1.11: 938 | version "0.1.12" 939 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 940 | dependencies: 941 | iconv-lite "~0.4.13" 942 | 943 | enhanced-resolve@~0.9.0: 944 | version "0.9.1" 945 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" 946 | dependencies: 947 | graceful-fs "^4.1.2" 948 | memory-fs "^0.2.0" 949 | tapable "^0.1.8" 950 | 951 | errno@^0.1.3: 952 | version "0.1.4" 953 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" 954 | dependencies: 955 | prr "~0.0.0" 956 | 957 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: 958 | version "1.0.5" 959 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 960 | 961 | esutils@^2.0.2: 962 | version "2.0.2" 963 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 964 | 965 | events@^1.0.0: 966 | version "1.1.1" 967 | resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" 968 | 969 | expand-brackets@^0.1.4: 970 | version "0.1.5" 971 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 972 | dependencies: 973 | is-posix-bracket "^0.1.0" 974 | 975 | expand-range@^1.8.1: 976 | version "1.8.2" 977 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 978 | dependencies: 979 | fill-range "^2.1.0" 980 | 981 | extend@~3.0.0: 982 | version "3.0.1" 983 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 984 | 985 | extglob@^0.3.1: 986 | version "0.3.2" 987 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 988 | dependencies: 989 | is-extglob "^1.0.0" 990 | 991 | extsprintf@1.3.0, extsprintf@^1.2.0: 992 | version "1.3.0" 993 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 994 | 995 | fbjs@^0.8.16, fbjs@^0.8.9: 996 | version "0.8.16" 997 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" 998 | dependencies: 999 | core-js "^1.0.0" 1000 | isomorphic-fetch "^2.1.1" 1001 | loose-envify "^1.0.0" 1002 | object-assign "^4.1.0" 1003 | promise "^7.1.1" 1004 | setimmediate "^1.0.5" 1005 | ua-parser-js "^0.7.9" 1006 | 1007 | filename-regex@^2.0.0: 1008 | version "2.0.1" 1009 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 1010 | 1011 | fill-range@^2.1.0: 1012 | version "2.2.3" 1013 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 1014 | dependencies: 1015 | is-number "^2.1.0" 1016 | isobject "^2.0.0" 1017 | randomatic "^1.1.3" 1018 | repeat-element "^1.1.2" 1019 | repeat-string "^1.5.2" 1020 | 1021 | find-cache-dir@^0.1.1: 1022 | version "0.1.1" 1023 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" 1024 | dependencies: 1025 | commondir "^1.0.1" 1026 | mkdirp "^0.5.1" 1027 | pkg-dir "^1.0.0" 1028 | 1029 | find-up@^1.0.0: 1030 | version "1.1.2" 1031 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 1032 | dependencies: 1033 | path-exists "^2.0.0" 1034 | pinkie-promise "^2.0.0" 1035 | 1036 | for-in@^1.0.1: 1037 | version "1.0.2" 1038 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1039 | 1040 | for-own@^0.1.4: 1041 | version "0.1.5" 1042 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 1043 | dependencies: 1044 | for-in "^1.0.1" 1045 | 1046 | forever-agent@~0.6.1: 1047 | version "0.6.1" 1048 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1049 | 1050 | form-data@~2.1.1: 1051 | version "2.1.4" 1052 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" 1053 | dependencies: 1054 | asynckit "^0.4.0" 1055 | combined-stream "^1.0.5" 1056 | mime-types "^2.1.12" 1057 | 1058 | fs-readdir-recursive@^1.0.0: 1059 | version "1.1.0" 1060 | resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" 1061 | 1062 | fs.realpath@^1.0.0: 1063 | version "1.0.0" 1064 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1065 | 1066 | fsevents@^1.0.0: 1067 | version "1.1.3" 1068 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" 1069 | dependencies: 1070 | nan "^2.3.0" 1071 | node-pre-gyp "^0.6.39" 1072 | 1073 | fstream-ignore@^1.0.5: 1074 | version "1.0.5" 1075 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 1076 | dependencies: 1077 | fstream "^1.0.0" 1078 | inherits "2" 1079 | minimatch "^3.0.0" 1080 | 1081 | fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.12: 1082 | version "1.0.12" 1083 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" 1084 | dependencies: 1085 | graceful-fs "^4.1.2" 1086 | inherits "~2.0.0" 1087 | mkdirp ">=0.5 0" 1088 | rimraf "2" 1089 | 1090 | gauge@~2.7.3: 1091 | version "2.7.4" 1092 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 1093 | dependencies: 1094 | aproba "^1.0.3" 1095 | console-control-strings "^1.0.0" 1096 | has-unicode "^2.0.0" 1097 | object-assign "^4.1.0" 1098 | signal-exit "^3.0.0" 1099 | string-width "^1.0.1" 1100 | strip-ansi "^3.0.1" 1101 | wide-align "^1.1.0" 1102 | 1103 | getpass@^0.1.1: 1104 | version "0.1.7" 1105 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1106 | dependencies: 1107 | assert-plus "^1.0.0" 1108 | 1109 | glob-base@^0.3.0: 1110 | version "0.3.0" 1111 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 1112 | dependencies: 1113 | glob-parent "^2.0.0" 1114 | is-glob "^2.0.0" 1115 | 1116 | glob-parent@^2.0.0: 1117 | version "2.0.0" 1118 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 1119 | dependencies: 1120 | is-glob "^2.0.0" 1121 | 1122 | glob@7.1.2, glob@^7.0.5, glob@^7.1.2: 1123 | version "7.1.2" 1124 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 1125 | dependencies: 1126 | fs.realpath "^1.0.0" 1127 | inflight "^1.0.4" 1128 | inherits "2" 1129 | minimatch "^3.0.4" 1130 | once "^1.3.0" 1131 | path-is-absolute "^1.0.0" 1132 | 1133 | glob@^7.1.3: 1134 | version "7.1.7" 1135 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 1136 | dependencies: 1137 | fs.realpath "^1.0.0" 1138 | inflight "^1.0.4" 1139 | inherits "2" 1140 | minimatch "^3.0.4" 1141 | once "^1.3.0" 1142 | path-is-absolute "^1.0.0" 1143 | 1144 | globals@^9.18.0: 1145 | version "9.18.0" 1146 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" 1147 | 1148 | graceful-fs@^4.1.2: 1149 | version "4.2.8" 1150 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" 1151 | 1152 | graceful-fs@^4.1.4: 1153 | version "4.1.11" 1154 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 1155 | 1156 | growl@1.10.3: 1157 | version "1.10.3" 1158 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" 1159 | 1160 | har-schema@^1.0.5: 1161 | version "1.0.5" 1162 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" 1163 | 1164 | har-validator@~4.2.1: 1165 | version "4.2.1" 1166 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" 1167 | dependencies: 1168 | ajv "^4.9.1" 1169 | har-schema "^1.0.5" 1170 | 1171 | has-ansi@^2.0.0: 1172 | version "2.0.0" 1173 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1174 | dependencies: 1175 | ansi-regex "^2.0.0" 1176 | 1177 | has-flag@^1.0.0: 1178 | version "1.0.0" 1179 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 1180 | 1181 | has-flag@^2.0.0: 1182 | version "2.0.0" 1183 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" 1184 | 1185 | has-unicode@^2.0.0: 1186 | version "2.0.1" 1187 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1188 | 1189 | hawk@3.1.3, hawk@~3.1.3: 1190 | version "3.1.3" 1191 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 1192 | dependencies: 1193 | boom "2.x.x" 1194 | cryptiles "2.x.x" 1195 | hoek "2.x.x" 1196 | sntp "1.x.x" 1197 | 1198 | he@1.1.1: 1199 | version "1.1.1" 1200 | resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" 1201 | 1202 | hoek@2.x.x: 1203 | version "2.16.3" 1204 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 1205 | 1206 | hoist-non-react-statics@^1.0.3: 1207 | version "1.2.0" 1208 | resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" 1209 | 1210 | home-or-tmp@^2.0.0: 1211 | version "2.0.0" 1212 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 1213 | dependencies: 1214 | os-homedir "^1.0.0" 1215 | os-tmpdir "^1.0.1" 1216 | 1217 | http-signature@~1.1.0: 1218 | version "1.1.1" 1219 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 1220 | dependencies: 1221 | assert-plus "^0.2.0" 1222 | jsprim "^1.2.2" 1223 | sshpk "^1.7.0" 1224 | 1225 | https-browserify@0.0.1: 1226 | version "0.0.1" 1227 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" 1228 | 1229 | iconv-lite@~0.4.13: 1230 | version "0.4.19" 1231 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" 1232 | 1233 | ieee754@^1.1.4: 1234 | version "1.1.8" 1235 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" 1236 | 1237 | indexof@0.0.1: 1238 | version "0.0.1" 1239 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 1240 | 1241 | inflight@^1.0.4: 1242 | version "1.0.6" 1243 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1244 | dependencies: 1245 | once "^1.3.0" 1246 | wrappy "1" 1247 | 1248 | inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: 1249 | version "2.0.4" 1250 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1251 | 1252 | inherits@2.0.1: 1253 | version "2.0.1" 1254 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" 1255 | 1256 | ini@~1.3.0: 1257 | version "1.3.8" 1258 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 1259 | 1260 | interpret@^0.6.4: 1261 | version "0.6.6" 1262 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b" 1263 | 1264 | invariant@^2.0.0, invariant@^2.2.2: 1265 | version "2.2.2" 1266 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" 1267 | dependencies: 1268 | loose-envify "^1.0.0" 1269 | 1270 | is-binary-path@^1.0.0: 1271 | version "1.0.1" 1272 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1273 | dependencies: 1274 | binary-extensions "^1.0.0" 1275 | 1276 | is-buffer@^1.1.5: 1277 | version "1.1.6" 1278 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1279 | 1280 | is-dotfile@^1.0.0: 1281 | version "1.0.3" 1282 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 1283 | 1284 | is-equal-shallow@^0.1.3: 1285 | version "0.1.3" 1286 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 1287 | dependencies: 1288 | is-primitive "^2.0.0" 1289 | 1290 | is-extendable@^0.1.1: 1291 | version "0.1.1" 1292 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1293 | 1294 | is-extglob@^1.0.0: 1295 | version "1.0.0" 1296 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 1297 | 1298 | is-finite@^1.0.0: 1299 | version "1.0.2" 1300 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1301 | dependencies: 1302 | number-is-nan "^1.0.0" 1303 | 1304 | is-fullwidth-code-point@^1.0.0: 1305 | version "1.0.0" 1306 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1307 | dependencies: 1308 | number-is-nan "^1.0.0" 1309 | 1310 | is-glob@^2.0.0, is-glob@^2.0.1: 1311 | version "2.0.1" 1312 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 1313 | dependencies: 1314 | is-extglob "^1.0.0" 1315 | 1316 | is-number@^2.1.0: 1317 | version "2.1.0" 1318 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 1319 | dependencies: 1320 | kind-of "^3.0.2" 1321 | 1322 | is-number@^3.0.0: 1323 | version "3.0.0" 1324 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1325 | dependencies: 1326 | kind-of "^3.0.2" 1327 | 1328 | is-posix-bracket@^0.1.0: 1329 | version "0.1.1" 1330 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1331 | 1332 | is-primitive@^2.0.0: 1333 | version "2.0.0" 1334 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1335 | 1336 | is-stream@^1.0.1: 1337 | version "1.1.0" 1338 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1339 | 1340 | is-typedarray@~1.0.0: 1341 | version "1.0.0" 1342 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1343 | 1344 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: 1345 | version "1.0.0" 1346 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1347 | 1348 | isobject@^2.0.0: 1349 | version "2.1.0" 1350 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1351 | dependencies: 1352 | isarray "1.0.0" 1353 | 1354 | isomorphic-fetch@^2.1.1: 1355 | version "2.2.1" 1356 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" 1357 | dependencies: 1358 | node-fetch "^1.0.1" 1359 | whatwg-fetch ">=0.10.0" 1360 | 1361 | isstream@~0.1.2: 1362 | version "0.1.2" 1363 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1364 | 1365 | js-tokens@^3.0.0, js-tokens@^3.0.2: 1366 | version "3.0.2" 1367 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 1368 | 1369 | jsbn@~0.1.0: 1370 | version "0.1.1" 1371 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1372 | 1373 | jsesc@^1.3.0: 1374 | version "1.3.0" 1375 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 1376 | 1377 | jsesc@~0.5.0: 1378 | version "0.5.0" 1379 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1380 | 1381 | json-schema@0.2.3: 1382 | version "0.2.3" 1383 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1384 | 1385 | json-stable-stringify@^1.0.1: 1386 | version "1.0.1" 1387 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 1388 | dependencies: 1389 | jsonify "~0.0.0" 1390 | 1391 | json-stringify-safe@~5.0.1: 1392 | version "5.0.1" 1393 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1394 | 1395 | json5@^0.5.0, json5@^0.5.1: 1396 | version "0.5.1" 1397 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 1398 | 1399 | jsonify@~0.0.0: 1400 | version "0.0.0" 1401 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1402 | 1403 | jsprim@^1.2.2: 1404 | version "1.4.1" 1405 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1406 | dependencies: 1407 | assert-plus "1.0.0" 1408 | extsprintf "1.3.0" 1409 | json-schema "0.2.3" 1410 | verror "1.10.0" 1411 | 1412 | kind-of@^3.0.2: 1413 | version "3.2.2" 1414 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1415 | dependencies: 1416 | is-buffer "^1.1.5" 1417 | 1418 | kind-of@^4.0.0: 1419 | version "4.0.0" 1420 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1421 | dependencies: 1422 | is-buffer "^1.1.5" 1423 | 1424 | lazy-cache@^1.0.3: 1425 | version "1.0.4" 1426 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" 1427 | 1428 | loader-utils@^0.2.11, loader-utils@^0.2.16: 1429 | version "0.2.17" 1430 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" 1431 | dependencies: 1432 | big.js "^3.1.3" 1433 | emojis-list "^2.0.0" 1434 | json5 "^0.5.0" 1435 | object-assign "^4.0.1" 1436 | 1437 | lodash-es@^4.2.1: 1438 | version "4.17.4" 1439 | resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" 1440 | 1441 | lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1: 1442 | version "4.17.21" 1443 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1444 | 1445 | longest@^1.0.1: 1446 | version "1.0.1" 1447 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" 1448 | 1449 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: 1450 | version "1.3.1" 1451 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 1452 | dependencies: 1453 | js-tokens "^3.0.0" 1454 | 1455 | memory-fs@^0.2.0: 1456 | version "0.2.0" 1457 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" 1458 | 1459 | memory-fs@~0.3.0: 1460 | version "0.3.0" 1461 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20" 1462 | dependencies: 1463 | errno "^0.1.3" 1464 | readable-stream "^2.0.1" 1465 | 1466 | micromatch@^2.1.5: 1467 | version "2.3.11" 1468 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 1469 | dependencies: 1470 | arr-diff "^2.0.0" 1471 | array-unique "^0.2.1" 1472 | braces "^1.8.2" 1473 | expand-brackets "^0.1.4" 1474 | extglob "^0.3.1" 1475 | filename-regex "^2.0.0" 1476 | is-extglob "^1.0.0" 1477 | is-glob "^2.0.1" 1478 | kind-of "^3.0.2" 1479 | normalize-path "^2.0.1" 1480 | object.omit "^2.0.0" 1481 | parse-glob "^3.0.4" 1482 | regex-cache "^0.4.2" 1483 | 1484 | mime-db@~1.30.0: 1485 | version "1.30.0" 1486 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" 1487 | 1488 | mime-types@^2.1.12, mime-types@~2.1.7: 1489 | version "2.1.17" 1490 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" 1491 | dependencies: 1492 | mime-db "~1.30.0" 1493 | 1494 | minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: 1495 | version "3.1.2" 1496 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1497 | dependencies: 1498 | brace-expansion "^1.1.7" 1499 | 1500 | minimist@0.0.8: 1501 | version "0.0.8" 1502 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1503 | 1504 | minimist@^1.2.0: 1505 | version "1.2.0" 1506 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1507 | 1508 | minimist@^1.2.5: 1509 | version "1.2.5" 1510 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1511 | 1512 | minimist@~0.0.1: 1513 | version "0.0.10" 1514 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 1515 | 1516 | mkdirp@0.5.1, mkdirp@^0.5.1, mkdirp@~0.5.0: 1517 | version "0.5.1" 1518 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1519 | dependencies: 1520 | minimist "0.0.8" 1521 | 1522 | "mkdirp@>=0.5 0": 1523 | version "0.5.5" 1524 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1525 | dependencies: 1526 | minimist "^1.2.5" 1527 | 1528 | mocha@*: 1529 | version "4.0.1" 1530 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.0.1.tgz#0aee5a95cf69a4618820f5e51fa31717117daf1b" 1531 | dependencies: 1532 | browser-stdout "1.3.0" 1533 | commander "2.11.0" 1534 | debug "3.1.0" 1535 | diff "3.3.1" 1536 | escape-string-regexp "1.0.5" 1537 | glob "7.1.2" 1538 | growl "1.10.3" 1539 | he "1.1.1" 1540 | mkdirp "0.5.1" 1541 | supports-color "4.4.0" 1542 | 1543 | ms@2.0.0: 1544 | version "2.0.0" 1545 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1546 | 1547 | nan@^2.3.0: 1548 | version "2.7.0" 1549 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" 1550 | 1551 | node-fetch@^1.0.1: 1552 | version "1.7.3" 1553 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" 1554 | dependencies: 1555 | encoding "^0.1.11" 1556 | is-stream "^1.0.1" 1557 | 1558 | node-libs-browser@^0.7.0: 1559 | version "0.7.0" 1560 | resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b" 1561 | dependencies: 1562 | assert "^1.1.1" 1563 | browserify-zlib "^0.1.4" 1564 | buffer "^4.9.0" 1565 | console-browserify "^1.1.0" 1566 | constants-browserify "^1.0.0" 1567 | crypto-browserify "3.3.0" 1568 | domain-browser "^1.1.1" 1569 | events "^1.0.0" 1570 | https-browserify "0.0.1" 1571 | os-browserify "^0.2.0" 1572 | path-browserify "0.0.0" 1573 | process "^0.11.0" 1574 | punycode "^1.2.4" 1575 | querystring-es3 "^0.2.0" 1576 | readable-stream "^2.0.5" 1577 | stream-browserify "^2.0.1" 1578 | stream-http "^2.3.1" 1579 | string_decoder "^0.10.25" 1580 | timers-browserify "^2.0.2" 1581 | tty-browserify "0.0.0" 1582 | url "^0.11.0" 1583 | util "^0.10.3" 1584 | vm-browserify "0.0.4" 1585 | 1586 | node-pre-gyp@^0.6.39: 1587 | version "0.6.39" 1588 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" 1589 | dependencies: 1590 | detect-libc "^1.0.2" 1591 | hawk "3.1.3" 1592 | mkdirp "^0.5.1" 1593 | nopt "^4.0.1" 1594 | npmlog "^4.0.2" 1595 | rc "^1.1.7" 1596 | request "2.81.0" 1597 | rimraf "^2.6.1" 1598 | semver "^5.3.0" 1599 | tar "^2.2.1" 1600 | tar-pack "^3.4.0" 1601 | 1602 | nopt@^4.0.1: 1603 | version "4.0.1" 1604 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1605 | dependencies: 1606 | abbrev "1" 1607 | osenv "^0.1.4" 1608 | 1609 | normalize-path@^2.0.0, normalize-path@^2.0.1: 1610 | version "2.1.1" 1611 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1612 | dependencies: 1613 | remove-trailing-separator "^1.0.1" 1614 | 1615 | npmlog@^4.0.2: 1616 | version "4.1.2" 1617 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1618 | dependencies: 1619 | are-we-there-yet "~1.1.2" 1620 | console-control-strings "~1.1.0" 1621 | gauge "~2.7.3" 1622 | set-blocking "~2.0.0" 1623 | 1624 | number-is-nan@^1.0.0: 1625 | version "1.0.1" 1626 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1627 | 1628 | oauth-sign@~0.8.1: 1629 | version "0.8.2" 1630 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1631 | 1632 | object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: 1633 | version "4.1.1" 1634 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1635 | 1636 | object.omit@^2.0.0: 1637 | version "2.0.1" 1638 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 1639 | dependencies: 1640 | for-own "^0.1.4" 1641 | is-extendable "^0.1.1" 1642 | 1643 | once@^1.3.0, once@^1.3.3: 1644 | version "1.4.0" 1645 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1646 | dependencies: 1647 | wrappy "1" 1648 | 1649 | optimist@~0.6.0: 1650 | version "0.6.1" 1651 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1652 | dependencies: 1653 | minimist "~0.0.1" 1654 | wordwrap "~0.0.2" 1655 | 1656 | os-browserify@^0.2.0: 1657 | version "0.2.1" 1658 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" 1659 | 1660 | os-homedir@^1.0.0: 1661 | version "1.0.2" 1662 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1663 | 1664 | os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: 1665 | version "1.0.2" 1666 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1667 | 1668 | osenv@^0.1.4: 1669 | version "0.1.4" 1670 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 1671 | dependencies: 1672 | os-homedir "^1.0.0" 1673 | os-tmpdir "^1.0.0" 1674 | 1675 | output-file-sync@^1.1.2: 1676 | version "1.1.2" 1677 | resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" 1678 | dependencies: 1679 | graceful-fs "^4.1.4" 1680 | mkdirp "^0.5.1" 1681 | object-assign "^4.1.0" 1682 | 1683 | pako@~0.2.0: 1684 | version "0.2.9" 1685 | resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" 1686 | 1687 | parse-glob@^3.0.4: 1688 | version "3.0.4" 1689 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1690 | dependencies: 1691 | glob-base "^0.3.0" 1692 | is-dotfile "^1.0.0" 1693 | is-extglob "^1.0.0" 1694 | is-glob "^2.0.0" 1695 | 1696 | path-browserify@0.0.0: 1697 | version "0.0.0" 1698 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" 1699 | 1700 | path-exists@^2.0.0: 1701 | version "2.1.0" 1702 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 1703 | dependencies: 1704 | pinkie-promise "^2.0.0" 1705 | 1706 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: 1707 | version "1.0.1" 1708 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1709 | 1710 | pbkdf2-compat@2.0.1: 1711 | version "2.0.1" 1712 | resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288" 1713 | 1714 | performance-now@^0.2.0: 1715 | version "0.2.0" 1716 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" 1717 | 1718 | pinkie-promise@^2.0.0: 1719 | version "2.0.1" 1720 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1721 | dependencies: 1722 | pinkie "^2.0.0" 1723 | 1724 | pinkie@^2.0.0: 1725 | version "2.0.4" 1726 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1727 | 1728 | pkg-dir@^1.0.0: 1729 | version "1.0.0" 1730 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" 1731 | dependencies: 1732 | find-up "^1.0.0" 1733 | 1734 | preserve@^0.2.0: 1735 | version "0.2.0" 1736 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 1737 | 1738 | private@^0.1.6, private@^0.1.7: 1739 | version "0.1.8" 1740 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" 1741 | 1742 | process-nextick-args@~1.0.6: 1743 | version "1.0.7" 1744 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1745 | 1746 | process@^0.11.0: 1747 | version "0.11.10" 1748 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 1749 | 1750 | promise@^7.1.1: 1751 | version "7.3.1" 1752 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" 1753 | dependencies: 1754 | asap "~2.0.3" 1755 | 1756 | prop-types@^15.5.4, prop-types@^15.6.0: 1757 | version "15.6.0" 1758 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" 1759 | dependencies: 1760 | fbjs "^0.8.16" 1761 | loose-envify "^1.3.1" 1762 | object-assign "^4.1.1" 1763 | 1764 | prr@~0.0.0: 1765 | version "0.0.0" 1766 | resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" 1767 | 1768 | punycode@1.3.2: 1769 | version "1.3.2" 1770 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 1771 | 1772 | punycode@^1.2.4, punycode@^1.4.1: 1773 | version "1.4.1" 1774 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1775 | 1776 | qs@~6.4.0: 1777 | version "6.4.0" 1778 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 1779 | 1780 | querystring-es3@^0.2.0: 1781 | version "0.2.1" 1782 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" 1783 | 1784 | querystring@0.2.0: 1785 | version "0.2.0" 1786 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 1787 | 1788 | randomatic@^1.1.3: 1789 | version "1.1.7" 1790 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" 1791 | dependencies: 1792 | is-number "^3.0.0" 1793 | kind-of "^4.0.0" 1794 | 1795 | rc@^1.1.7: 1796 | version "1.2.2" 1797 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" 1798 | dependencies: 1799 | deep-extend "~0.4.0" 1800 | ini "~1.3.0" 1801 | minimist "^1.2.0" 1802 | strip-json-comments "~2.0.1" 1803 | 1804 | react-redux@^4.0.0: 1805 | version "4.4.8" 1806 | resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.8.tgz#e7bc1dd100e8b64e96ac8212db113239b9e2e08f" 1807 | dependencies: 1808 | create-react-class "^15.5.1" 1809 | hoist-non-react-statics "^1.0.3" 1810 | invariant "^2.0.0" 1811 | lodash "^4.2.0" 1812 | loose-envify "^1.1.0" 1813 | prop-types "^15.5.4" 1814 | 1815 | react@^16.1.1: 1816 | version "16.1.1" 1817 | resolved "https://registry.yarnpkg.com/react/-/react-16.1.1.tgz#d5c4ef795507e3012282dd51261ff9c0e824fe1f" 1818 | dependencies: 1819 | fbjs "^0.8.16" 1820 | loose-envify "^1.1.0" 1821 | object-assign "^4.1.1" 1822 | prop-types "^15.6.0" 1823 | 1824 | readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.6: 1825 | version "2.3.3" 1826 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" 1827 | dependencies: 1828 | core-util-is "~1.0.0" 1829 | inherits "~2.0.3" 1830 | isarray "~1.0.0" 1831 | process-nextick-args "~1.0.6" 1832 | safe-buffer "~5.1.1" 1833 | string_decoder "~1.0.3" 1834 | util-deprecate "~1.0.1" 1835 | 1836 | readdirp@^2.0.0: 1837 | version "2.1.0" 1838 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 1839 | dependencies: 1840 | graceful-fs "^4.1.2" 1841 | minimatch "^3.0.2" 1842 | readable-stream "^2.0.2" 1843 | set-immediate-shim "^1.0.1" 1844 | 1845 | redux@^3.0.0: 1846 | version "3.7.2" 1847 | resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" 1848 | dependencies: 1849 | lodash "^4.2.1" 1850 | lodash-es "^4.2.1" 1851 | loose-envify "^1.1.0" 1852 | symbol-observable "^1.0.3" 1853 | 1854 | regenerate@^1.2.1: 1855 | version "1.3.3" 1856 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" 1857 | 1858 | regenerator-runtime@^0.10.5: 1859 | version "0.10.5" 1860 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" 1861 | 1862 | regenerator-runtime@^0.11.0: 1863 | version "0.11.0" 1864 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" 1865 | 1866 | regenerator-transform@^0.10.0: 1867 | version "0.10.1" 1868 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" 1869 | dependencies: 1870 | babel-runtime "^6.18.0" 1871 | babel-types "^6.19.0" 1872 | private "^0.1.6" 1873 | 1874 | regex-cache@^0.4.2: 1875 | version "0.4.4" 1876 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" 1877 | dependencies: 1878 | is-equal-shallow "^0.1.3" 1879 | 1880 | regexpu-core@^2.0.0: 1881 | version "2.0.0" 1882 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" 1883 | dependencies: 1884 | regenerate "^1.2.1" 1885 | regjsgen "^0.2.0" 1886 | regjsparser "^0.1.4" 1887 | 1888 | regjsgen@^0.2.0: 1889 | version "0.2.0" 1890 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 1891 | 1892 | regjsparser@^0.1.4: 1893 | version "0.1.5" 1894 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 1895 | dependencies: 1896 | jsesc "~0.5.0" 1897 | 1898 | remove-trailing-separator@^1.0.1: 1899 | version "1.1.0" 1900 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 1901 | 1902 | repeat-element@^1.1.2: 1903 | version "1.1.2" 1904 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 1905 | 1906 | repeat-string@^1.5.2: 1907 | version "1.6.1" 1908 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1909 | 1910 | repeating@^2.0.0: 1911 | version "2.0.1" 1912 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 1913 | dependencies: 1914 | is-finite "^1.0.0" 1915 | 1916 | request@2.81.0: 1917 | version "2.81.0" 1918 | resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" 1919 | dependencies: 1920 | aws-sign2 "~0.6.0" 1921 | aws4 "^1.2.1" 1922 | caseless "~0.12.0" 1923 | combined-stream "~1.0.5" 1924 | extend "~3.0.0" 1925 | forever-agent "~0.6.1" 1926 | form-data "~2.1.1" 1927 | har-validator "~4.2.1" 1928 | hawk "~3.1.3" 1929 | http-signature "~1.1.0" 1930 | is-typedarray "~1.0.0" 1931 | isstream "~0.1.2" 1932 | json-stringify-safe "~5.0.1" 1933 | mime-types "~2.1.7" 1934 | oauth-sign "~0.8.1" 1935 | performance-now "^0.2.0" 1936 | qs "~6.4.0" 1937 | safe-buffer "^5.0.1" 1938 | stringstream "~0.0.4" 1939 | tough-cookie "~2.3.0" 1940 | tunnel-agent "^0.6.0" 1941 | uuid "^3.0.0" 1942 | 1943 | right-align@^0.1.1: 1944 | version "0.1.3" 1945 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" 1946 | dependencies: 1947 | align-text "^0.1.1" 1948 | 1949 | rimraf@2: 1950 | version "2.7.1" 1951 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 1952 | dependencies: 1953 | glob "^7.1.3" 1954 | 1955 | rimraf@^2.5.1, rimraf@^2.6.1: 1956 | version "2.6.2" 1957 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 1958 | dependencies: 1959 | glob "^7.0.5" 1960 | 1961 | ripemd160@0.2.0: 1962 | version "0.2.0" 1963 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce" 1964 | 1965 | safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1966 | version "5.1.1" 1967 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 1968 | 1969 | semver@^5.3.0: 1970 | version "5.4.1" 1971 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" 1972 | 1973 | set-blocking@~2.0.0: 1974 | version "2.0.0" 1975 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1976 | 1977 | set-immediate-shim@^1.0.1: 1978 | version "1.0.1" 1979 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 1980 | 1981 | setimmediate@^1.0.4, setimmediate@^1.0.5: 1982 | version "1.0.5" 1983 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 1984 | 1985 | sha.js@2.2.6: 1986 | version "2.2.6" 1987 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" 1988 | 1989 | should-equal@^2.0.0: 1990 | version "2.0.0" 1991 | resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" 1992 | dependencies: 1993 | should-type "^1.4.0" 1994 | 1995 | should-format@^3.0.3: 1996 | version "3.0.3" 1997 | resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" 1998 | dependencies: 1999 | should-type "^1.3.0" 2000 | should-type-adaptors "^1.0.1" 2001 | 2002 | should-type-adaptors@^1.0.1: 2003 | version "1.0.1" 2004 | resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz#efe5553cdf68cff66e5c5f51b712dc351c77beaa" 2005 | dependencies: 2006 | should-type "^1.3.0" 2007 | should-util "^1.0.0" 2008 | 2009 | should-type@^1.3.0, should-type@^1.4.0: 2010 | version "1.4.0" 2011 | resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" 2012 | 2013 | should-util@^1.0.0: 2014 | version "1.0.0" 2015 | resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.0.tgz#c98cda374aa6b190df8ba87c9889c2b4db620063" 2016 | 2017 | should@*: 2018 | version "13.1.3" 2019 | resolved "https://registry.yarnpkg.com/should/-/should-13.1.3.tgz#a089bdf7979392a8272a712c8b63acbaafb7948f" 2020 | dependencies: 2021 | should-equal "^2.0.0" 2022 | should-format "^3.0.3" 2023 | should-type "^1.4.0" 2024 | should-type-adaptors "^1.0.1" 2025 | should-util "^1.0.0" 2026 | 2027 | signal-exit@^3.0.0: 2028 | version "3.0.2" 2029 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2030 | 2031 | slash@^1.0.0: 2032 | version "1.0.0" 2033 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 2034 | 2035 | sntp@1.x.x: 2036 | version "1.0.9" 2037 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 2038 | dependencies: 2039 | hoek "2.x.x" 2040 | 2041 | source-list-map@~0.1.7: 2042 | version "0.1.8" 2043 | resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" 2044 | 2045 | source-map-support@^0.4.15: 2046 | version "0.4.18" 2047 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" 2048 | dependencies: 2049 | source-map "^0.5.6" 2050 | 2051 | source-map@^0.5.6, source-map@~0.5.1: 2052 | version "0.5.7" 2053 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2054 | 2055 | source-map@~0.4.1: 2056 | version "0.4.4" 2057 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" 2058 | dependencies: 2059 | amdefine ">=0.0.4" 2060 | 2061 | sshpk@^1.7.0: 2062 | version "1.13.1" 2063 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" 2064 | dependencies: 2065 | asn1 "~0.2.3" 2066 | assert-plus "^1.0.0" 2067 | dashdash "^1.12.0" 2068 | getpass "^0.1.1" 2069 | optionalDependencies: 2070 | bcrypt-pbkdf "^1.0.0" 2071 | ecc-jsbn "~0.1.1" 2072 | jsbn "~0.1.0" 2073 | tweetnacl "~0.14.0" 2074 | 2075 | stream-browserify@^2.0.1: 2076 | version "2.0.1" 2077 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" 2078 | dependencies: 2079 | inherits "~2.0.1" 2080 | readable-stream "^2.0.2" 2081 | 2082 | stream-http@^2.3.1: 2083 | version "2.7.2" 2084 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" 2085 | dependencies: 2086 | builtin-status-codes "^3.0.0" 2087 | inherits "^2.0.1" 2088 | readable-stream "^2.2.6" 2089 | to-arraybuffer "^1.0.0" 2090 | xtend "^4.0.0" 2091 | 2092 | string-width@^1.0.1, string-width@^1.0.2: 2093 | version "1.0.2" 2094 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2095 | dependencies: 2096 | code-point-at "^1.0.0" 2097 | is-fullwidth-code-point "^1.0.0" 2098 | strip-ansi "^3.0.0" 2099 | 2100 | string_decoder@^0.10.25: 2101 | version "0.10.31" 2102 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 2103 | 2104 | string_decoder@~1.0.3: 2105 | version "1.0.3" 2106 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" 2107 | dependencies: 2108 | safe-buffer "~5.1.0" 2109 | 2110 | stringstream@~0.0.4: 2111 | version "0.0.5" 2112 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 2113 | 2114 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2115 | version "3.0.1" 2116 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2117 | dependencies: 2118 | ansi-regex "^2.0.0" 2119 | 2120 | strip-json-comments@~2.0.1: 2121 | version "2.0.1" 2122 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2123 | 2124 | supports-color@4.4.0: 2125 | version "4.4.0" 2126 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" 2127 | dependencies: 2128 | has-flag "^2.0.0" 2129 | 2130 | supports-color@^2.0.0: 2131 | version "2.0.0" 2132 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 2133 | 2134 | supports-color@^3.1.0: 2135 | version "3.2.3" 2136 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" 2137 | dependencies: 2138 | has-flag "^1.0.0" 2139 | 2140 | symbol-observable@^1.0.3: 2141 | version "1.0.4" 2142 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" 2143 | 2144 | tapable@^0.1.8, tapable@~0.1.8: 2145 | version "0.1.10" 2146 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" 2147 | 2148 | tar-pack@^3.4.0: 2149 | version "3.4.1" 2150 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" 2151 | dependencies: 2152 | debug "^2.2.0" 2153 | fstream "^1.0.10" 2154 | fstream-ignore "^1.0.5" 2155 | once "^1.3.3" 2156 | readable-stream "^2.1.4" 2157 | rimraf "^2.5.1" 2158 | tar "^2.2.1" 2159 | uid-number "^0.0.6" 2160 | 2161 | tar@^2.2.1: 2162 | version "2.2.2" 2163 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" 2164 | dependencies: 2165 | block-stream "*" 2166 | fstream "^1.0.12" 2167 | inherits "2" 2168 | 2169 | timers-browserify@^2.0.2: 2170 | version "2.0.4" 2171 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" 2172 | dependencies: 2173 | setimmediate "^1.0.4" 2174 | 2175 | to-arraybuffer@^1.0.0: 2176 | version "1.0.1" 2177 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" 2178 | 2179 | to-fast-properties@^1.0.3: 2180 | version "1.0.3" 2181 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 2182 | 2183 | tough-cookie@~2.3.0: 2184 | version "2.3.3" 2185 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" 2186 | dependencies: 2187 | punycode "^1.4.1" 2188 | 2189 | trim-right@^1.0.1: 2190 | version "1.0.1" 2191 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 2192 | 2193 | tty-browserify@0.0.0: 2194 | version "0.0.0" 2195 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" 2196 | 2197 | tunnel-agent@^0.6.0: 2198 | version "0.6.0" 2199 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2200 | dependencies: 2201 | safe-buffer "^5.0.1" 2202 | 2203 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2204 | version "0.14.5" 2205 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2206 | 2207 | ua-parser-js@^0.7.9: 2208 | version "0.7.33" 2209 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" 2210 | 2211 | uglify-js@~2.7.3: 2212 | version "2.7.5" 2213 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" 2214 | dependencies: 2215 | async "~0.2.6" 2216 | source-map "~0.5.1" 2217 | uglify-to-browserify "~1.0.0" 2218 | yargs "~3.10.0" 2219 | 2220 | uglify-to-browserify@~1.0.0: 2221 | version "1.0.2" 2222 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" 2223 | 2224 | uid-number@^0.0.6: 2225 | version "0.0.6" 2226 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 2227 | 2228 | url@^0.11.0: 2229 | version "0.11.0" 2230 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" 2231 | dependencies: 2232 | punycode "1.3.2" 2233 | querystring "0.2.0" 2234 | 2235 | user-home@^1.1.1: 2236 | version "1.1.1" 2237 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 2238 | 2239 | util-deprecate@~1.0.1: 2240 | version "1.0.2" 2241 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2242 | 2243 | util@0.10.3, util@^0.10.3: 2244 | version "0.10.3" 2245 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" 2246 | dependencies: 2247 | inherits "2.0.1" 2248 | 2249 | uuid@^3.0.0: 2250 | version "3.1.0" 2251 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" 2252 | 2253 | v8flags@^2.1.1: 2254 | version "2.1.1" 2255 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" 2256 | dependencies: 2257 | user-home "^1.1.1" 2258 | 2259 | verror@1.10.0: 2260 | version "1.10.0" 2261 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 2262 | dependencies: 2263 | assert-plus "^1.0.0" 2264 | core-util-is "1.0.2" 2265 | extsprintf "^1.2.0" 2266 | 2267 | vm-browserify@0.0.4: 2268 | version "0.0.4" 2269 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" 2270 | dependencies: 2271 | indexof "0.0.1" 2272 | 2273 | watchpack@^0.2.1: 2274 | version "0.2.9" 2275 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b" 2276 | dependencies: 2277 | async "^0.9.0" 2278 | chokidar "^1.0.0" 2279 | graceful-fs "^4.1.2" 2280 | 2281 | webpack-core@~0.6.9: 2282 | version "0.6.9" 2283 | resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" 2284 | dependencies: 2285 | source-list-map "~0.1.7" 2286 | source-map "~0.4.1" 2287 | 2288 | webpack@^1.12.9: 2289 | version "1.15.0" 2290 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.15.0.tgz#4ff31f53db03339e55164a9d468ee0324968fe98" 2291 | dependencies: 2292 | acorn "^3.0.0" 2293 | async "^1.3.0" 2294 | clone "^1.0.2" 2295 | enhanced-resolve "~0.9.0" 2296 | interpret "^0.6.4" 2297 | loader-utils "^0.2.11" 2298 | memory-fs "~0.3.0" 2299 | mkdirp "~0.5.0" 2300 | node-libs-browser "^0.7.0" 2301 | optimist "~0.6.0" 2302 | supports-color "^3.1.0" 2303 | tapable "~0.1.8" 2304 | uglify-js "~2.7.3" 2305 | watchpack "^0.2.1" 2306 | webpack-core "~0.6.9" 2307 | 2308 | whatwg-fetch@>=0.10.0: 2309 | version "2.0.3" 2310 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" 2311 | 2312 | wide-align@^1.1.0: 2313 | version "1.1.2" 2314 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" 2315 | dependencies: 2316 | string-width "^1.0.2" 2317 | 2318 | window-size@0.1.0: 2319 | version "0.1.0" 2320 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" 2321 | 2322 | wordwrap@0.0.2: 2323 | version "0.0.2" 2324 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" 2325 | 2326 | wordwrap@~0.0.2: 2327 | version "0.0.3" 2328 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 2329 | 2330 | wrappy@1: 2331 | version "1.0.2" 2332 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2333 | 2334 | xtend@^4.0.0: 2335 | version "4.0.1" 2336 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 2337 | 2338 | yargs@~3.10.0: 2339 | version "3.10.0" 2340 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" 2341 | dependencies: 2342 | camelcase "^1.0.2" 2343 | cliui "^2.1.0" 2344 | decamelize "^1.0.0" 2345 | window-size "0.1.0" 2346 | --------------------------------------------------------------------------------