Organize components, use webpack import aliases

This commit is contained in:
Ken-Håvard Lieng 2017-06-21 08:40:28 +02:00
parent f174d98107
commit 86c5451edb
50 changed files with 269 additions and 133 deletions

File diff suppressed because one or more lines are too long

View File

@ -20,5 +20,12 @@
}, },
"globals": { "globals": {
"DEV": true "DEV": true
},
"settings": {
"import/resolver": {
"webpack": {
"config": "webpack.config.dev.js"
}
}
} }
} }

View File

@ -18,6 +18,7 @@
"css-loader": "^0.28.0", "css-loader": "^0.28.0",
"eslint": "^3.15.0", "eslint": "^3.15.0",
"eslint-config-airbnb": "^14.1.0", "eslint-config-airbnb": "^14.1.0",
"eslint-import-resolver-webpack": "^0.8.1",
"eslint-loader": "^1.6.1", "eslint-loader": "^1.6.1",
"eslint-plugin-import": "^2.2.0", "eslint-plugin-import": "^2.2.0",
"eslint-plugin-jsx-a11y": "^4.0.0", "eslint-plugin-jsx-a11y": "^4.0.0",

View File

@ -1,10 +1,10 @@
import { COMMAND } from 'state/actions';
import { join, part, invite, kick, setTopic } from 'state/channels';
import { sendMessage, raw } from 'state/messages';
import { setNick, disconnect, whois, away } from 'state/servers';
import { select } from 'state/tab';
import { find } from 'util';
import createCommandMiddleware, { beforeHandler, notFoundHandler } from './middleware/command'; import createCommandMiddleware, { beforeHandler, notFoundHandler } from './middleware/command';
import { COMMAND } from './state/actions';
import { join, part, invite, kick, setTopic } from './state/channels';
import { sendMessage, raw } from './state/messages';
import { setNick, disconnect, whois, away } from './state/servers';
import { select } from './state/tab';
import { find } from './util';
const help = [ const help = [
'/join <channel> - Join a channel', '/join <channel> - Join a channel',

View File

@ -1,9 +1,9 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import Route from '../containers/Route'; import Route from 'containers/Route';
import Chat from '../containers/Chat'; import Chat from 'containers/Chat';
import Connect from '../containers/Connect'; import Connect from 'containers/Connect';
import Settings from '../containers/Settings'; import Settings from 'containers/Settings';
import TabList from '../components/TabList'; import TabList from 'components/TabList';
export default class App extends Component { export default class App extends Component {
handleClick = () => { handleClick = () => {

View File

@ -1,7 +0,0 @@
import React from 'react';
const Navicon = ({ toggleMenu }) => (
<i className="icon-menu navicon" onClick={toggleMenu} />
);
export default Navicon;

View File

@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import App from '../containers/App'; import App from 'containers/App';
const Root = ({ store }) => ( const Root = ({ store }) => (
<Provider store={store}> <Provider store={store}>

View File

@ -1,9 +1,9 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import ChatTitle from '../ChatTitle'; import ChatTitle from './ChatTitle';
import Search from '../Search'; import Search from './Search';
import MessageBox from '../MessageBox'; import MessageBox from './MessageBox';
import MessageInput from '../MessageInput'; import MessageInput from './MessageInput';
import UserList from '../UserList'; import UserList from './UserList';
export default class Chat extends Component { export default class Chat extends Component {
handleCloseClick = () => { handleCloseClick = () => {

View File

@ -1,9 +1,9 @@
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import { List } from 'immutable'; import { List } from 'immutable';
import Navicon from '../containers/Navicon'; import Navicon from 'containers/Navicon';
import Editable from './ui/Editable'; import Editable from 'components/ui/Editable';
import { isValidServerName } from '../state/servers'; import { isValidServerName } from 'state/servers';
import { linkify } from '../util'; import { linkify } from 'util';
export default class ChatTitle extends PureComponent { export default class ChatTitle extends PureComponent {
render() { render() {

View File

@ -2,8 +2,8 @@ import React, { PureComponent } from 'react';
import { List } from 'react-virtualized/dist/commonjs/List'; import { List } from 'react-virtualized/dist/commonjs/List';
import { AutoSizer } from 'react-virtualized/dist/commonjs/AutoSizer'; import { AutoSizer } from 'react-virtualized/dist/commonjs/AutoSizer';
import debounce from 'lodash/debounce'; import debounce from 'lodash/debounce';
import { getScrollPos, saveScrollPos } from 'util/scrollPosition';
import Message from './Message'; import Message from './Message';
import { getScrollPos, saveScrollPos } from '../util/scrollPosition';
const fetchThreshold = 500; const fetchThreshold = 500;

View File

@ -1,5 +1,5 @@
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import Editable from './ui/Editable'; import Editable from 'components/ui/Editable';
export default class MessageInput extends PureComponent { export default class MessageInput extends PureComponent {
state = { state = {

View File

@ -1,5 +1,5 @@
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import { timestamp, linkify } from '../util'; import { timestamp, linkify } from 'util';
export default class SearchResult extends PureComponent { export default class SearchResult extends PureComponent {
render() { render() {

View File

@ -0,0 +1,3 @@
import Chat from './Chat';
export default Chat;

View File

@ -1,5 +1,5 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import Navicon from '../../containers/Navicon'; import Navicon from 'containers/Navicon';
export default class Connect extends Component { export default class Connect extends Component {
state = { state = {

View File

@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import Navicon from '../../containers/Navicon'; import Navicon from 'containers/Navicon';
import FileInput from '../FileInput'; import FileInput from 'components/ui/FileInput';
const Settings = ({ settings, onCertChange, onKeyChange, uploadCert }) => { const Settings = ({ settings, onCertChange, onKeyChange, uploadCert }) => {
const status = settings.get('uploadingCert') ? 'Uploading...' : 'Upload'; const status = settings.get('uploadingCert') ? 'Uploading...' : 'Upload';

View File

@ -1,5 +1,5 @@
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import { stringWidth } from '../../util'; import { stringWidth } from 'util';
export default class Editable extends PureComponent { export default class Editable extends PureComponent {
static defaultProps = { static defaultProps = {

View File

@ -0,0 +1,7 @@
import React from 'react';
const Navicon = ({ onClick }) => (
<i className="icon-menu navicon" onClick={onClick} />
);
export default Navicon;

View File

@ -1,13 +1,13 @@
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { createStructuredSelector } from 'reselect'; import { createStructuredSelector } from 'reselect';
import App from '../components/App'; import App from 'components/App';
import { getConnected } from '../state/app'; import { getConnected } from 'state/app';
import { getChannels } from '../state/channels'; import { getChannels } from 'state/channels';
import { getPrivateChats } from '../state/privateChats'; import { getPrivateChats } from 'state/privateChats';
import { getServers } from '../state/servers'; import { getServers } from 'state/servers';
import { getSelectedTab, select } from '../state/tab'; import { getSelectedTab, select } from 'state/tab';
import { getShowTabList, hideMenu } from '../state/ui'; import { getShowTabList, hideMenu } from 'state/ui';
import { push } from '../util/router'; import { push } from 'util/router';
const mapState = createStructuredSelector({ const mapState = createStructuredSelector({
channels: getChannels, channels: getChannels,

View File

@ -1,18 +1,18 @@
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { createStructuredSelector } from 'reselect'; import { createStructuredSelector } from 'reselect';
import Chat from '../components/pages/Chat'; import Chat from 'components/pages/Chat';
import { getSelectedTabTitle } from '../state'; import { getSelectedTabTitle } from 'state';
import { getSelectedChannel, getSelectedChannelUsers, part } from '../state/channels'; import { getSelectedChannel, getSelectedChannelUsers, part } from 'state/channels';
import { getCurrentInputHistoryEntry, addInputHistory, resetInputHistory, import { getCurrentInputHistoryEntry, addInputHistory, resetInputHistory,
incrementInputHistory, decrementInputHistory } from '../state/input'; incrementInputHistory, decrementInputHistory } from 'state/input';
import { getSelectedMessages, getHasMoreMessages, import { getSelectedMessages, getHasMoreMessages,
runCommand, sendMessage, fetchMessages, addFetchedMessages } from '../state/messages'; runCommand, sendMessage, fetchMessages, addFetchedMessages } from 'state/messages';
import { openPrivateChat, closePrivateChat } from '../state/privateChats'; import { openPrivateChat, closePrivateChat } from 'state/privateChats';
import { getSearch, searchMessages, toggleSearch } from '../state/search'; import { getSearch, searchMessages, toggleSearch } from 'state/search';
import { getCurrentNick, disconnect, setNick, setServerName } from '../state/servers'; import { getCurrentNick, disconnect, setNick, setServerName } from 'state/servers';
import { getSelectedTab, select } from '../state/tab'; import { getSelectedTab, select } from 'state/tab';
import { getShowUserList, toggleUserList } from '../state/ui'; import { getShowUserList, toggleUserList } from 'state/ui';
const mapState = createStructuredSelector({ const mapState = createStructuredSelector({
channel: getSelectedChannel, channel: getSelectedChannel,

View File

@ -1,10 +1,10 @@
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { createStructuredSelector } from 'reselect'; import { createStructuredSelector } from 'reselect';
import Connect from '../components/pages/Connect'; import Connect from 'components/pages/Connect';
import { getConnectDefaults } from '../state/app'; import { getConnectDefaults } from 'state/app';
import { join } from '../state/channels'; import { join } from 'state/channels';
import { connect as connectServer } from '../state/servers'; import { connect as connectServer } from 'state/servers';
import { select } from '../state/tab'; import { select } from 'state/tab';
const mapState = createStructuredSelector({ const mapState = createStructuredSelector({
defaults: getConnectDefaults defaults: getConnectDefaults

View File

@ -1,7 +1,9 @@
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import Navicon from '../components/Navicon'; import Navicon from 'components/ui/Navicon';
import { toggleMenu } from '../state/ui'; import { toggleMenu } from 'state/ui';
const mapDispatch = { toggleMenu }; const mapDispatch = {
onClick: toggleMenu
};
export default connect(null, mapDispatch)(Navicon); export default connect(null, mapDispatch)(Navicon);

View File

@ -1,8 +1,8 @@
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { createStructuredSelector } from 'reselect'; import { createStructuredSelector } from 'reselect';
import Settings from '../components/pages/Settings'; import Settings from 'components/pages/Settings';
import { getSettings, setCert, setKey, uploadCert } from '../state/settings'; import { getSettings, setCert, setKey, uploadCert } from 'state/settings';
const mapState = createStructuredSelector({ const mapState = createStructuredSelector({
settings: getSettings settings: getSettings

View File

@ -3,11 +3,11 @@ import { render } from 'react-dom';
import { AppContainer } from 'react-hot-loader'; import { AppContainer } from 'react-hot-loader';
import 'react-virtualized/styles.css'; import 'react-virtualized/styles.css';
import Root from 'components/Root';
import initRouter from 'util/router';
import Socket from 'util/Socket';
import configureStore from './store'; import configureStore from './store';
import initRouter from './util/router';
import routes from './routes'; import routes from './routes';
import Socket from './util/Socket';
import Root from './components/Root';
import runModules from './modules'; import runModules from './modules';
const host = DEV ? `${window.location.hostname}:1337` : window.location.host; const host = DEV ? `${window.location.hostname}:1337` : window.location.host;

View File

@ -1,5 +1,5 @@
import { addMessages, inform, print } from '../state/messages'; import { addMessages, inform, print } from 'state/messages';
import { isChannel } from '../util'; import { isChannel } from 'util';
export const beforeHandler = '_before'; export const beforeHandler = '_before';
export const notFoundHandler = 'commandNotFound'; export const notFoundHandler = 'commandNotFound';

View File

@ -1,4 +1,4 @@
import * as actions from '../state/actions'; import { ADD_MESSAGES, ADD_FETCHED_MESSAGES } from 'state/actions';
// //
// This middleware handles waiting until MessageBox // This middleware handles waiting until MessageBox
@ -9,7 +9,7 @@ const message = store => next => {
const cache = {}; const cache = {};
return action => { return action => {
if (action.type === actions.ADD_MESSAGES && action.prepend) { if (action.type === ADD_MESSAGES && action.prepend) {
const key = `${action.server} ${action.channel}`; const key = `${action.server} ${action.channel}`;
if (ready[key]) { if (ready[key]) {
@ -18,7 +18,7 @@ const message = store => next => {
} }
cache[key] = action; cache[key] = action;
} else if (action.type === actions.ADD_FETCHED_MESSAGES) { } else if (action.type === ADD_FETCHED_MESSAGES) {
const key = `${action.server} ${action.channel}`; const key = `${action.server} ${action.channel}`;
ready[key] = true; ready[key] = true;

View File

@ -1,7 +1,7 @@
import capitalize from 'lodash/capitalize'; import capitalize from 'lodash/capitalize';
import { getRouter } from '../state'; import { getRouter } from 'state';
import { getCurrentServerName } from '../state/servers'; import { getCurrentServerName } from 'state/servers';
import { observe } from '../util/observe'; import { observe } from 'util/observe';
export default function documentTitle({ store }) { export default function documentTitle({ store }) {
observe(store, [getRouter, getCurrentServerName], (router, serverName) => { observe(store, [getRouter, getCurrentServerName], (router, serverName) => {

View File

@ -1,6 +1,6 @@
import FontFaceObserver from 'fontfaceobserver'; import FontFaceObserver from 'fontfaceobserver';
import { setCharWidth } from '../state/app'; import { setCharWidth } from 'state/app';
import { stringWidth } from '../util'; import { stringWidth } from 'util';
export default function fonts({ store }) { export default function fonts({ store }) {
let charWidth = localStorage.charWidth; let charWidth = localStorage.charWidth;

View File

@ -1,11 +1,11 @@
import Cookie from 'js-cookie'; import Cookie from 'js-cookie';
import { socket as socketActions } from '../state/actions'; import { socket as socketActions } from 'state/actions';
import { getWrapWidth, setConnectDefaults } from '../state/app'; import { getWrapWidth, setConnectDefaults } from 'state/app';
import { addMessages } from '../state/messages'; import { addMessages } from 'state/messages';
import { select, updateSelection } from '../state/tab'; import { select, updateSelection } from 'state/tab';
import { find } from '../util'; import { find } from 'util';
import { when } from '../util/observe'; import { when } from 'util/observe';
import { replace } from '../util/router'; import { replace } from 'util/router';
export default function initialState({ store }) { export default function initialState({ store }) {
const env = JSON.parse(document.getElementById('env').innerHTML); const env = JSON.parse(document.getElementById('env').innerHTML);

View File

@ -1,9 +1,9 @@
import { socketAction } from '../state/actions'; import { socketAction } from 'state/actions';
import { setConnected } from '../state/app'; import { setConnected } from 'state/app';
import { broadcast, inform, print, addMessage, addMessages } from '../state/messages'; import { broadcast, inform, print, addMessage, addMessages } from 'state/messages';
import { select } from '../state/tab'; import { select } from 'state/tab';
import { normalizeChannel } from '../util'; import { normalizeChannel } from 'util';
import { replace } from '../util/router'; import { replace } from 'util/router';
function withReason(message, reason) { function withReason(message, reason) {
return message + (reason ? ` (${reason})` : ''); return message + (reason ? ` (${reason})` : '');

View File

@ -1,7 +1,7 @@
import Cookie from 'js-cookie'; import Cookie from 'js-cookie';
import debounce from 'lodash/debounce'; import debounce from 'lodash/debounce';
import { observe } from '../util/observe'; import { getSelectedTab } from 'state/tab';
import { getSelectedTab } from '../state/tab'; import { observe } from 'util/observe';
const saveTab = debounce(tab => const saveTab = debounce(tab =>
Cookie.set('tab', tab.toString(), { expires: 30 }) Cookie.set('tab', tab.toString(), { expires: 30 })

View File

@ -1,7 +1,7 @@
import { when } from '../util/observe'; import { getCharWidth } from 'state/app';
import { measureScrollBarWidth } from '../util'; import { updateMessageHeight } from 'state/messages';
import { getCharWidth } from '../state/app'; import { when } from 'util/observe';
import { updateMessageHeight } from '../state/messages'; import { measureScrollBarWidth } from 'util';
const menuWidth = 200; const menuWidth = 200;
const messagePadding = 30; const messagePadding = 30;

View File

@ -1,5 +1,5 @@
import { Record } from 'immutable'; import { Record } from 'immutable';
import createReducer from '../util/createReducer'; import createReducer from 'util/createReducer';
import * as actions from './actions'; import * as actions from './actions';
export const getApp = state => state.app; export const getApp = state => state.app;

View File

@ -1,6 +1,6 @@
import { Map, List, Record } from 'immutable'; import { Map, List, Record } from 'immutable';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import createReducer from '../util/createReducer'; import createReducer from 'util/createReducer';
import { getSelectedTab, updateSelection } from './tab'; import { getSelectedTab, updateSelection } from './tab';
import * as actions from './actions'; import * as actions from './actions';

View File

@ -1,5 +1,5 @@
import { List, Record } from 'immutable'; import { List, Record } from 'immutable';
import createReducer from '../util/createReducer'; import createReducer from 'util/createReducer';
import * as actions from './actions'; import * as actions from './actions';
const HISTORY_MAX_LENGTH = 128; const HISTORY_MAX_LENGTH = 128;

View File

@ -1,9 +1,9 @@
import { List, Map, Record } from 'immutable'; import { List, Map, Record } from 'immutable';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import createReducer from '../util/createReducer'; import { findBreakpoints, messageHeight, linkify, timestamp } from 'util';
import createReducer from 'util/createReducer';
import { getApp } from './app'; import { getApp } from './app';
import { getSelectedTab } from './tab'; import { getSelectedTab } from './tab';
import { findBreakpoints, messageHeight, linkify, timestamp } from '../util';
import * as actions from './actions'; import * as actions from './actions';
const Message = Record({ const Message = Record({

View File

@ -1,5 +1,5 @@
import { Set, Map } from 'immutable'; import { Set, Map } from 'immutable';
import createReducer from '../util/createReducer'; import createReducer from 'util/createReducer';
import { updateSelection } from './tab'; import { updateSelection } from './tab';
import * as actions from './actions'; import * as actions from './actions';

View File

@ -1,5 +1,5 @@
import { List, Record } from 'immutable'; import { List, Record } from 'immutable';
import createReducer from '../util/createReducer'; import createReducer from 'util/createReducer';
import * as actions from './actions'; import * as actions from './actions';
const State = Record({ const State = Record({

View File

@ -1,6 +1,6 @@
import { Map, Record } from 'immutable'; import { Map, Record } from 'immutable';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import createReducer from '../util/createReducer'; import createReducer from 'util/createReducer';
import { getSelectedTab, updateSelection } from './tab'; import { getSelectedTab, updateSelection } from './tab';
import * as actions from './actions'; import * as actions from './actions';

View File

@ -1,6 +1,6 @@
import { Map } from 'immutable'; import { Map } from 'immutable';
import base64 from 'base64-arraybuffer'; import base64 from 'base64-arraybuffer';
import createReducer from '../util/createReducer'; import createReducer from 'util/createReducer';
import * as actions from './actions'; import * as actions from './actions';
export const getSettings = state => state.settings; export const getSettings = state => state.settings;

View File

@ -1,6 +1,6 @@
import { Record, List } from 'immutable'; import { Record, List } from 'immutable';
import { push, replace, LOCATION_CHANGED } from '../util/router'; import createReducer from 'util/createReducer';
import createReducer from '../util/createReducer'; import { push, replace, LOCATION_CHANGED } from 'util/router';
import * as actions from './actions'; import * as actions from './actions';
const TabRecord = Record({ const TabRecord = Record({

View File

@ -1,6 +1,6 @@
import { Record } from 'immutable'; import { Record } from 'immutable';
import createReducer from '../util/createReducer'; import createReducer from 'util/createReducer';
import { LOCATION_CHANGED } from '../util/router'; import { LOCATION_CHANGED } from 'util/router';
import * as actions from './actions'; import * as actions from './actions';
const State = Record({ const State = Record({

View File

@ -1,7 +1,7 @@
import { createStore, applyMiddleware, compose } from 'redux'; import { createStore, applyMiddleware, compose } from 'redux';
import thunk from 'redux-thunk'; import thunk from 'redux-thunk';
import createReducer from './state'; import createReducer from 'state';
import { routeReducer, routeMiddleware } from './util/router'; import { routeReducer, routeMiddleware } from 'util/router';
import message from './middleware/message'; import message from './middleware/message';
import createSocketMiddleware from './middleware/socket'; import createSocketMiddleware from './middleware/socket';
import commands from './commands'; import commands from './commands';

View File

@ -1,6 +1,14 @@
var path = require('path'); var path = require('path');
var webpack = require('webpack'); var webpack = require('webpack');
function dir(p) {
return path.resolve(__dirname, p);
}
function jsDir(p) {
return path.resolve(__dirname, 'src/js', p);
}
module.exports = { module.exports = {
devtool: 'eval', devtool: 'eval',
entry: [ entry: [
@ -9,10 +17,18 @@ module.exports = {
'./src/js/index' './src/js/index'
], ],
output: { output: {
path: path.join(__dirname, 'dist'), path: dir('dist'),
filename: 'bundle.js', filename: 'bundle.js',
publicPath: '/' publicPath: '/'
}, },
resolve: {
alias: {
components: jsDir('components'),
containers: jsDir('containers'),
state: jsDir('state'),
util: jsDir('util')
}
},
module: { module: {
rules: [ rules: [
{ test: /\.js$/, loader: 'eslint-loader', exclude: /node_modules/, enforce: 'pre' }, { test: /\.js$/, loader: 'eslint-loader', exclude: /node_modules/, enforce: 'pre' },

View File

@ -1,14 +1,30 @@
var path = require('path'); var path = require('path');
var webpack = require('webpack'); var webpack = require('webpack');
function dir(p) {
return path.resolve(__dirname, p);
}
function jsDir(p) {
return path.resolve(__dirname, 'src/js', p);
}
module.exports = { module.exports = {
entry: [ entry: [
'./src/js/index' './src/js/index'
], ],
output: { output: {
path: path.join(__dirname, 'dist'), path: dir('dist'),
filename: 'bundle.js' filename: 'bundle.js'
}, },
resolve: {
alias: {
components: jsDir('components'),
containers: jsDir('containers'),
state: jsDir('state'),
util: jsDir('util')
}
},
module: { module: {
rules: [ rules: [
{ test: /\.js$/, loader: 'eslint-loader', exclude: /node_modules/, enforce: 'pre' }, { test: /\.js$/, loader: 'eslint-loader', exclude: /node_modules/, enforce: 'pre' },

View File

@ -171,6 +171,10 @@ array-equal@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
array-find@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8"
array-flatten@1.1.1: array-flatten@1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
@ -1875,6 +1879,14 @@ enhanced-resolve@^3.0.0:
object-assign "^4.0.1" object-assign "^4.0.1"
tapable "^0.2.5" tapable "^0.2.5"
enhanced-resolve@~0.9.0:
version "0.9.1"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
dependencies:
graceful-fs "^4.1.2"
memory-fs "^0.2.0"
tapable "^0.1.8"
"errno@>=0.1.1 <0.2.0-0", errno@^0.1.3: "errno@>=0.1.1 <0.2.0-0", errno@^0.1.3:
version "0.1.4" version "0.1.4"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
@ -2012,6 +2024,22 @@ eslint-import-resolver-node@^0.2.0:
object-assign "^4.0.1" object-assign "^4.0.1"
resolve "^1.1.6" resolve "^1.1.6"
eslint-import-resolver-webpack@^0.8.1:
version "0.8.1"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.8.1.tgz#c7f8b4d5bd3c5b489457e5728c5db1c4ffbac9aa"
dependencies:
array-find "^1.0.0"
debug "^2.2.0"
enhanced-resolve "~0.9.0"
find-root "^0.1.1"
has "^1.0.1"
interpret "^1.0.0"
is-absolute "^0.2.3"
lodash.get "^3.7.0"
node-libs-browser "^1.0.0"
resolve "^1.2.0"
semver "^5.3.0"
eslint-loader@^1.6.1: eslint-loader@^1.6.1:
version "1.8.0" version "1.8.0"
resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.8.0.tgz#8261f08cca4bd2ea263b77733e93cf0f21e20aa9" resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.8.0.tgz#8261f08cca4bd2ea263b77733e93cf0f21e20aa9"
@ -2362,6 +2390,10 @@ find-index@^0.1.1:
version "0.1.1" version "0.1.1"
resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4"
find-root@^0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-0.1.2.tgz#98d2267cff1916ccaf2743b3a0eea81d79d7dcd1"
find-up@^1.0.0: find-up@^1.0.0:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
@ -3706,6 +3738,10 @@ lodash._basecopy@^3.0.0:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
lodash._baseget@^3.0.0:
version "3.7.2"
resolved "https://registry.yarnpkg.com/lodash._baseget/-/lodash._baseget-3.7.2.tgz#1b6ae1d5facf3c25532350a13c1197cb8bb674f4"
lodash._basetostring@^3.0.0: lodash._basetostring@^3.0.0:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5"
@ -3738,6 +3774,12 @@ lodash._root@^3.0.0:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
lodash._topath@^3.0.0:
version "3.8.1"
resolved "https://registry.yarnpkg.com/lodash._topath/-/lodash._topath-3.8.1.tgz#3ec5e2606014f4cb97f755fe6914edd8bfc00eac"
dependencies:
lodash.isarray "^3.0.0"
lodash.camelcase@^4.3.0: lodash.camelcase@^4.3.0:
version "4.3.0" version "4.3.0"
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
@ -3756,6 +3798,13 @@ lodash.escape@^3.0.0:
dependencies: dependencies:
lodash._root "^3.0.0" lodash._root "^3.0.0"
lodash.get@^3.7.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-3.7.0.tgz#3ce68ae2c91683b281cc5394128303cbf75e691f"
dependencies:
lodash._baseget "^3.0.0"
lodash._topath "^3.0.0"
lodash.isarguments@^3.0.0: lodash.isarguments@^3.0.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
@ -3861,6 +3910,10 @@ media-typer@0.3.0:
version "0.3.0" version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
memory-fs@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
memory-fs@^0.4.0, memory-fs@~0.4.1: memory-fs@^0.4.0, memory-fs@~0.4.1:
version "0.4.1" version "0.4.1"
resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
@ -4015,6 +4068,34 @@ node-int64@^0.4.0:
version "0.4.0" version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
node-libs-browser@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-1.1.1.tgz#2a38243abedd7dffcd07a97c9aca5668975a6fea"
dependencies:
assert "^1.1.1"
browserify-zlib "^0.1.4"
buffer "^4.3.0"
console-browserify "^1.1.0"
constants-browserify "^1.0.0"
crypto-browserify "^3.11.0"
domain-browser "^1.1.1"
events "^1.0.0"
https-browserify "0.0.1"
os-browserify "^0.2.0"
path-browserify "0.0.0"
process "^0.11.0"
punycode "^1.2.4"
querystring-es3 "^0.2.0"
readable-stream "^2.0.5"
stream-browserify "^2.0.1"
stream-http "^2.3.1"
string_decoder "^0.10.25"
timers-browserify "^1.4.2"
tty-browserify "0.0.0"
url "^0.11.0"
util "^0.10.3"
vm-browserify "0.0.4"
node-libs-browser@^2.0.0: node-libs-browser@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646"
@ -4681,7 +4762,7 @@ process-nextick-args@^1.0.6, process-nextick-args@~1.0.6:
version "1.0.7" version "1.0.7"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
process@^0.11.0: process@^0.11.0, process@~0.11.0:
version "0.11.10" version "0.11.10"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
@ -5113,7 +5194,7 @@ resolve@1.1.7:
version "1.1.7" version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0, resolve@^1.3.2:
version "1.3.3" version "1.3.3"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
dependencies: dependencies:
@ -5505,6 +5586,10 @@ table@^3.7.8:
slice-ansi "0.0.4" slice-ansi "0.0.4"
string-width "^2.0.0" string-width "^2.0.0"
tapable@^0.1.8:
version "0.1.10"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
tapable@^0.2.5, tapable@~0.2.5: tapable@^0.2.5, tapable@~0.2.5:
version "0.2.6" version "0.2.6"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d"
@ -5576,6 +5661,12 @@ time-stamp@^1.0.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
timers-browserify@^1.4.2:
version "1.4.2"
resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d"
dependencies:
process "~0.11.0"
timers-browserify@^2.0.2: timers-browserify@^2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86"