diff --git a/app/actions/actionsTypes.js b/app/actions/actionsTypes.js index bca1e4860..eff1ee41e 100644 --- a/app/actions/actionsTypes.js +++ b/app/actions/actionsTypes.js @@ -75,7 +75,7 @@ export const SERVER = createRequestTypes('SERVER', [ 'ADD', 'GOTO_ADD' ]); -export const METEOR = createRequestTypes('METEOR_CONNECT', [...defaultTypes, 'DISCONNECT']); +export const METEOR = createRequestTypes('METEOR_CONNECT', [...defaultTypes, 'DISCONNECT', 'DISCONNECT_BY_USER']); export const LOGOUT = 'LOGOUT'; // logout is always success export const ACTIVE_USERS = createRequestTypes('ACTIVE_USERS', ['SET', 'REQUEST']); diff --git a/app/actions/connect.js b/app/actions/connect.js index 412c096f3..40049f28e 100644 --- a/app/actions/connect.js +++ b/app/actions/connect.js @@ -25,3 +25,8 @@ export function disconnect(err) { err }; } +export function disconnect_by_user() { + return { + type: types.METEOR.DISCONNECT_BY_USER + }; +} diff --git a/app/containers/Routes.js b/app/containers/Routes.js index 09fb6eee9..8772306cf 100644 --- a/app/containers/Routes.js +++ b/app/containers/Routes.js @@ -41,10 +41,9 @@ export default class Routes extends React.Component { return (); } - if (login.token && !login.failure && !login.isRegistering) { - return ( this.navigator = nav} />); + if (!login.token || login.isRegistering) { + return ( this.navigator = nav} />); } - - return ( this.navigator = nav} />); + return ( this.navigator = nav} />); } } diff --git a/app/containers/routes/AuthRoutes.js b/app/containers/routes/AuthRoutes.js index eaf7e4452..15bbde567 100644 --- a/app/containers/routes/AuthRoutes.js +++ b/app/containers/routes/AuthRoutes.js @@ -6,6 +6,7 @@ import RoomsListView from '../../views/RoomsListView'; import RoomView from '../../views/RoomView'; import CreateChannelView from '../../views/CreateChannelView'; import SelectUsersView from '../../views/SelectUsersView'; +import NewServerView from '../../views/NewServerView'; const AuthRoutes = StackNavigator( { @@ -26,6 +27,12 @@ const AuthRoutes = StackNavigator( navigationOptions: { title: 'Select Users' } + }, + AddServer: { + screen: NewServerView, + navigationOptions: { + title: 'New server' + } } }, { diff --git a/app/lib/ddp.js b/app/lib/ddp.js new file mode 100644 index 000000000..91a05097f --- /dev/null +++ b/app/lib/ddp.js @@ -0,0 +1,126 @@ +import EJSON from 'ejson'; + +class EventEmitter { + constructor() { + this.events = {}; + } + on(event, listener) { + if (typeof this.events[event] !== 'object') { + this.events[event] = []; + } + this.events[event].push(listener); + } + removeListener(event, listener) { + if (typeof this.events[event] === 'object') { + const idx = this.events[event].indexOf(listener); + if (idx > -1) { + this.events[event].splice(idx, 1); + } + } + } + emit(event, ...args) { + if (typeof this.events[event] === 'object') { + this.events[event].forEach((listener) => { + try { + listener.apply(this, args); + } catch (e) { + console.log(e); + } + }); + } + } + once(event, listener) { + this.on(event, function g(...args) { + this.removeListener(event, g); + listener.apply(this, args); + }); + } +} + +export default class Socket extends EventEmitter { + constructor(url) { + super(); + this.url = url.replace(/^http/, 'ws'); + this.id = 0; + this.subscriptions = {}; + this._connect(); + this.ddp = new EventEmitter(); + this.on('ping', () => this.send({ msg: 'pong' })); + this.on('result', data => this.ddp.emit(data.id, { result: data.result, error: data.error })); + this.on('ready', data => this.ddp.emit(data.subs[0], data)); + } + send(obj) { + return new Promise((resolve, reject) => { + this.id += 1; + const id = obj.id || `${ this.id }`; + this.connection.send(EJSON.stringify({ ...obj, id })); + this.ddp.once(id, data => (data.error ? reject(data.error) : resolve(data.result || data.subs))); + }); + } + _connect() { + const connection = new WebSocket(`${ this.url }/websocket`); + connection.onopen = () => { + this.emit('open'); + this.send({ msg: 'connect', version: '1', support: ['1', 'pre2', 'pre1'] }); + }; + connection.onclose = e => this.emit('disconnected', e); + // connection.onerror = () => { + // // alert(error.type); + // // console.log(error); + // // console.log(`WebSocket Error ${ JSON.stringify({...error}) }`); + // }; + + connection.onmessage = (e) => { + const data = EJSON.parse(e.data); + this.emit(data.msg, data); + return data.collection && this.emit(data.collection, data); + }; + // this.on('disconnected', e => alert(JSON.stringify(e))); + this.connection = connection; + } + logout() { + return this.call('logout').then(() => this.subscriptions = {}); + } + disconnect() { + this.emit('disconnected_by_user'); + this.connection.close(); + } + reconnect() { + this.disconnect(); + this.once('connected', () => { + Object.keys(this.subscriptions).forEach((key) => { + const { name, params } = this.subscriptions[key]; + this.subscriptions[key].unsubscribe(); + this.subscribe(name, params); + }); + }); + this._connect(); + } + call(method, ...params) { + return this.send({ + msg: 'method', method, params + }); + } + unsubscribe(id) { + if (!this.subscriptions[id]) { + return Promise.reject(); + } + delete this.subscriptions[id]; + return this.send({ + msg: 'unsub', + id + }); + } + subscribe(name, ...params) { + return this.send({ + msg: 'sub', name, params + }).then((data) => { + this.subscriptions[data.id] = { + name, + params, + unsubscribe: () => this.unsubscribe(data.id) + }; + return this.subscriptions[data.id]; + }); + } +} diff --git a/app/lib/meteor-redux.js b/app/lib/meteor-redux.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js index 97faaac0b..884d1b3fb 100644 --- a/app/lib/rocketchat.js +++ b/app/lib/rocketchat.js @@ -1,4 +1,3 @@ -import Meteor from 'react-native-meteor'; import Random from 'react-native-meteor/lib/Random'; import { AsyncStorage, Platform } from 'react-native'; import { hashPassword } from 'react-native-meteor/lib/utils'; @@ -11,19 +10,13 @@ import realm from './realm'; import * as actions from '../actions'; import { someoneTyping } from '../actions/room'; import { setUser } from '../actions/login'; -import { disconnect, connectSuccess } from '../actions/connect'; +import { disconnect, disconnect_by_user, connectSuccess, connectFailure } from '../actions/connect'; import { requestActiveUser } from '../actions/activeUsers'; +import Ddp from './ddp'; export { Accounts } from 'react-native-meteor'; -const call = (method, ...params) => new Promise((resolve, reject) => { - Meteor.call(method, ...params, (err, data) => { - if (err) { - reject(err); - } - resolve(data); - }); -}); +const call = (method, ...params) => RocketChat.ddp.call(method, ...params); // eslint-disable-line const TOKEN_KEY = 'reactnativemeteor_usertoken'; const SERVER_TIMEOUT = 30000; @@ -67,92 +60,72 @@ const RocketChat = { activeUser[ddpMessage.id] = status; return reduxStore.dispatch(requestActiveUser(activeUser)); }, - connect(_url) { + reconnect() { + if (this.ddp) { + this.ddp.reconnect(); + } + }, + connect(url) { + if (this.ddp) { + this.ddp.disconnect(); + } + this.ddp = new Ddp(url); return new Promise((resolve) => { - const url = `${ _url }/websocket`; - - Meteor.connect(url, { autoConnect: true, autoReconnect: true }); - - Meteor.ddp.on('disconnected', () => { + this.ddp.on('disconnected_by_user', () => { + reduxStore.dispatch(disconnect_by_user()); + }); + this.ddp.on('disconnected', () => { reduxStore.dispatch(disconnect()); }); - - Meteor.ddp.on('connected', () => { - reduxStore.dispatch(connectSuccess()); - resolve(); - }); - - Meteor.ddp.on('connected', async() => { - Meteor.ddp.on('added', (ddpMessage) => { - if (ddpMessage.collection === 'users') { - return RocketChat._setUser(ddpMessage); - } - }); - Meteor.ddp.on('removed', (ddpMessage) => { - if (ddpMessage.collection === 'users') { - return RocketChat._setUser(ddpMessage); - } - }); - Meteor.ddp.on('changed', (ddpMessage) => { - if (ddpMessage.collection === 'stream-room-messages') { - return realm.write(() => { - const message = this._buildMessage(ddpMessage.fields.args[0]); - realm.create('messages', message, true); - }); - } - if (ddpMessage.collection === 'stream-notify-room') { - const [_rid, ev] = ddpMessage.fields.eventName.split('/'); - if (ev !== 'typing') { - return; - } - return reduxStore.dispatch(someoneTyping({ _rid, username: ddpMessage.fields.args[0], typing: ddpMessage.fields.args[1] })); - } - if (ddpMessage.collection === 'stream-notify-user') { - const [type, data] = ddpMessage.fields.args; - const [, ev] = ddpMessage.fields.eventName.split('/'); - if (/subscriptions/.test(ev)) { - if (data.roles) { - data.roles = data.roles.map(role => ({ value: role })); - } - realm.write(() => { - realm.create('subscriptions', data, true); - }); - } - if (/rooms/.test(ev) && type === 'updated') { - const sub = realm.objects('subscriptions').filtered('rid == $0', data._id)[0]; - realm.write(() => { - sub.roomUpdatedAt = data._updatedAt; - }); - } - } - if (ddpMessage.collection === 'users') { - return RocketChat._setUser(ddpMessage); - } - }); + this.ddp.on('open', async() => resolve(reduxStore.dispatch(connectSuccess()))); + this.ddp.on('connected', () => { RocketChat.getSettings(); RocketChat.getPermissions(); }); - }) - .catch(e => console.error(e)); - }, - login(params, callback) { - return new Promise((resolve, reject) => { - Meteor._startLoggingIn(); - return Meteor.call('login', params, (err, result) => { - Meteor._endLoggingIn(); - Meteor._handleLoginCallback(err, result); - if (err) { - if (/user not found/i.test(err.reason)) { - err.error = 1; - err.reason = 'User or Password incorrect'; - err.message = 'User or Password incorrect'; - } - reject(err); - } else { - resolve(result); + + this.ddp.on('error', (err) => { + alert(JSON.stringify(err)); + reduxStore.dispatch(connectFailure()); + }); + + this.ddp.on('connected', () => this.ddp.subscribe('activeUsers', null, false)); + + + this.ddp.on('users', (ddpMessage) => { + if (ddpMessage.collection === 'users') { + return RocketChat._setUser(ddpMessage); } - if (typeof callback === 'function') { - callback(err, result); + }); + + this.ddp.on('stream-room-messages', ddpMessage => realm.write(() => { + const message = this._buildMessage(ddpMessage.fields.args[0]); + realm.create('messages', message, true); + })); + + this.ddp.on('stream-notify-room', (ddpMessage) => { + const [_rid, ev] = ddpMessage.fields.eventName.split('/'); + if (ev !== 'typing') { + return; + } + return reduxStore.dispatch(someoneTyping({ _rid, username: ddpMessage.fields.args[0], typing: ddpMessage.fields.args[1] })); + }); + + this.ddp.on('stream-notify-user', (ddpMessage) => { + const [type, data] = ddpMessage.fields.args; + const [, ev] = ddpMessage.fields.eventName.split('/'); + if (/subscriptions/.test(ev)) { + if (data.roles) { + data.roles = data.roles.map(role => ({ value: role })); + } + realm.write(() => { + realm.create('subscriptions', data, true); + }); + } + if (/rooms/.test(ev) && type === 'updated') { + const sub = realm.objects('subscriptions').filtered('rid == $0', data._id)[0]; + realm.write(() => { + sub.roomUpdatedAt = data._updatedAt; + }); } }); }); @@ -236,10 +209,7 @@ const RocketChat = { loadSubscriptions(cb) { const { server } = reduxStore.getState().server; - Meteor.call('subscriptions/get', (err, data) => { - if (err) { - console.error(err); - } + this.ddp.call('subscriptions/get').then((data) => { if (data.length) { realm.write(() => { data.forEach((subscription) => { @@ -305,32 +275,26 @@ const RocketChat = { return message; }, loadMessagesForRoom(rid, end, cb) { - return new Promise((resolve, reject) => { - Meteor.call('loadHistory', rid, end, 20, (err, data) => { - if (err) { - if (cb) { - cb({ end: true }); - } - return reject(err); - } - if (data && data.messages.length) { - const messages = data.messages.map(message => this._buildMessage(message)); - realm.write(() => { - messages.forEach((message) => { - realm.create('messages', message, true); - }); + return this.ddp.call('loadHistory', rid, end, 20).then((data) => { + if (data && data.messages.length) { + const messages = data.messages.map(message => this._buildMessage(message)); + realm.write(() => { + messages.forEach((message) => { + realm.create('messages', message, true); }); - } - + }); + } + if (cb) { + cb({ end: data && data.messages.length < 20 }); + } + return data.message; + }, (err) => { + if (err) { if (cb) { - if (data && data.messages.length < 20) { - cb({ end: true }); - } else { - cb({ end: false }); - } + cb({ end: true }); } - resolve(); - }); + return Promise.reject(err); + } }); }, @@ -484,14 +448,41 @@ const RocketChat = { data.forEach(subscription => realm.create('subscriptions', subscription, true)); }); - Meteor.subscribe('stream-notify-user', `${ login.user.id }/subscriptions-changed`, false); - Meteor.subscribe('stream-notify-user', `${ login.user.id }/rooms-changed`, false); - Meteor.subscribe('activeUsers', null, false); + this.ddp.subscribe('stream-notify-user', `${ login.user.id }/subscriptions-changed`, false); + this.ddp.subscribe('stream-notify-user', `${ login.user.id }/rooms-changed`, false); return data; }, + disconnect() { + if (!this.ddp) { + return; + } + reduxStore.dispatch(disconnect_by_user()); + delete this.ddp; + return this.ddp.disconnect(); + }, + login(params, callback) { + return this.ddp.call('login', params).then((result) => { + if (typeof callback === 'function') { + callback(null, result); + } + return result; + }, (err) => { + if (/user not found/i.test(err.reason)) { + err.error = 1; + err.reason = 'User or Password incorrect'; + err.message = 'User or Password incorrect'; + } + if (typeof callback === 'function') { + callback(err, null); + } + return Promise.reject(err); + }); + }, logout({ server }) { - Meteor.logout(); - Meteor.disconnect(); + if (this.ddp) { + this.ddp.logout(); + // this.disconnect(); + } AsyncStorage.removeItem(TOKEN_KEY); AsyncStorage.removeItem(`${ TOKEN_KEY }-${ server }`); }, @@ -570,7 +561,7 @@ const RocketChat = { return `${ room._server.id }/${ roomType }/${ room.name }?msg=${ message._id }`; }, subscribe(...args) { - return Meteor.subscribe(...args); + return this.ddp.subscribe(...args); }, emitTyping(room, t = true) { const { login } = reduxStore.getState(); diff --git a/app/reducers/connect.js b/app/reducers/connect.js index 0aad57c34..abfd142c1 100644 --- a/app/reducers/connect.js +++ b/app/reducers/connect.js @@ -4,6 +4,7 @@ const initialState = { connecting: false, connected: false, errorMessage: '', + disconnected_by_user: false, failure: false }; @@ -12,7 +13,8 @@ export default function connect(state = initialState, action) { case METEOR.REQUEST: return { ...state, - connecting: true + connecting: true, + disconnected_by_user: false }; case METEOR.SUCCESS: return { @@ -29,6 +31,11 @@ export default function connect(state = initialState, action) { failure: true, errorMessage: action.err }; + case METEOR.DISCONNECT_BY_USER: + return { + ...state, + disconnected_by_user: true + }; case METEOR.DISCONNECT: return initialState; default: diff --git a/app/reducers/login.js b/app/reducers/login.js index 37d72ef63..cccf73b1f 100644 --- a/app/reducers/login.js +++ b/app/reducers/login.js @@ -26,7 +26,7 @@ export default function login(state = initialState, action) { ...state, isFetching: false, isAuthenticated: true, - user: action.user, + user: { ...state.user, ...action.user }, token: action.user.token, failure: false, error: '' diff --git a/app/sagas/connect.js b/app/sagas/connect.js index 3b0c6f793..8291073c7 100644 --- a/app/sagas/connect.js +++ b/app/sagas/connect.js @@ -1,27 +1,44 @@ -import { put, call, takeLatest, select } from 'redux-saga/effects'; +import { call, takeLatest, select, take, race } from 'redux-saga/effects'; +import { delay } from 'redux-saga'; import { METEOR } from '../actions/actionsTypes'; import RocketChat from '../lib/rocketchat'; -import { connectSuccess, connectFailure } from '../actions/connect'; - const getServer = ({ server }) => server.server; const connect = url => RocketChat.connect(url); -const test = function* test() { - try { - const server = yield select(getServer); - const response = yield call(connect, server); - yield put(connectSuccess(response)); - } catch (err) { - yield put(connectFailure(err.status)); +const watchConnect = function* watchConnect() { + const { disconnect } = yield race({ + disconnect: take(METEOR.DISCONNECT), + disconnected_by_user: take(METEOR.DISCONNECT_BY_USER) + }); + if (disconnect) { + while (true) { + const { connected } = yield race({ + connected: take(METEOR.SUCCESS), + timeout: call(delay, 1000) + }); + if (connected) { + return; + } + yield RocketChat.reconnect(); + } } }; -// const watchConnect = function* watchConnect() { -// }; +const test = function* test() { + // try { + const server = yield select(getServer); + // const response = + yield call(connect, server); + // yield put(connectSuccess(response)); + // } catch (err) { + // yield put(connectFailure(err.status)); + // } +}; + const root = function* root() { yield takeLatest(METEOR.REQUEST, test); - // yield fork(watchConnect); - // yield fork(auto); + // yield take(METEOR.SUCCESS, watchConnect); + yield takeLatest(METEOR.SUCCESS, watchConnect); }; export default root; diff --git a/app/sagas/login.js b/app/sagas/login.js index 4941756d3..fae216993 100644 --- a/app/sagas/login.js +++ b/app/sagas/login.js @@ -1,5 +1,5 @@ import { AsyncStorage } from 'react-native'; -import { take, put, call, takeLatest, select, all } from 'redux-saga/effects'; +import { put, call, takeLatest, select, all } from 'redux-saga/effects'; import * as types from '../actions/actionsTypes'; import { loginRequest, @@ -8,6 +8,7 @@ import { registerIncomplete, loginSuccess, loginFailure, + logout, setToken, registerSuccess, setUsernameRequest, @@ -40,16 +41,13 @@ const getToken = function* getToken() { console.log('getTokenerr', e); } } else { - yield put(setToken()); + return yield put(setToken()); } }; const handleLoginWhenServerChanges = function* handleLoginWhenServerChanges() { try { - yield take(types.METEOR.SUCCESS); - yield call(getToken); - - const user = yield select(getUser); + const user = yield call(getToken); if (user.token) { yield put(loginRequest({ resume: user.token })); } @@ -76,17 +74,19 @@ const handleLoginRequest = function* handleLoginRequest({ credentials }) { // if user has username if (me.username) { - user.username = me.username; const userInfo = yield call(userInfoCall, { server, token: user.token, userId: user.id }); + user.username = userInfo.user.username; if (userInfo.user.roles) { user.roles = userInfo.user.roles; } } else { yield put(registerIncomplete()); } - yield put(loginSuccess(user)); } catch (err) { + if (err.error === 403) { + return yield put(logout()); + } yield put(loginFailure(err)); } }; @@ -149,7 +149,7 @@ const handleForgotPasswordRequest = function* handleForgotPasswordRequest({ emai }; const root = function* root() { - yield takeLatest(types.SERVER.CHANGED, handleLoginWhenServerChanges); + yield takeLatest(types.METEOR.SUCCESS, handleLoginWhenServerChanges); yield takeLatest(types.LOGIN.REQUEST, handleLoginRequest); yield takeLatest(types.LOGIN.SUCCESS, saveToken); yield takeLatest(types.LOGIN.SUBMIT, handleLoginSubmit); diff --git a/app/sagas/rooms.js b/app/sagas/rooms.js index 747da4256..fc8e12306 100644 --- a/app/sagas/rooms.js +++ b/app/sagas/rooms.js @@ -67,7 +67,7 @@ const watchRoomOpen = function* watchRoomOpen({ room }) { const thread = yield fork(usersTyping, { rid: room.rid }); yield take(types.ROOM.OPEN); cancel(thread); - subscriptions.forEach(sub => sub.stop()); + subscriptions.forEach(sub => sub.unsubscribe()); }; const watchuserTyping = function* watchuserTyping({ status }) { diff --git a/app/sagas/selectServer.js b/app/sagas/selectServer.js index 84ad3a3ee..8e4d9cdf2 100644 --- a/app/sagas/selectServer.js +++ b/app/sagas/selectServer.js @@ -1,10 +1,9 @@ -import { put, takeEvery, call, takeLatest, race, take } from 'redux-saga/effects'; +import { put, call, takeLatest, race, take } from 'redux-saga/effects'; import { delay } from 'redux-saga'; import { AsyncStorage } from 'react-native'; import { SERVER } from '../actions/actionsTypes'; -import { connectRequest, disconnect } from '../actions/connect'; +import { connectRequest, disconnect, disconnect_by_user } from '../actions/connect'; import { changedServer, serverSuccess, serverFailure, serverRequest, setServer } from '../actions/server'; -import { logout } from '../actions/login'; import RocketChat from '../lib/rocketchat'; import realm from '../lib/realm'; import * as NavigationService from '../containers/routes/NavigationService'; @@ -14,13 +13,13 @@ const validate = function* validate(server) { }; const selectServer = function* selectServer({ server }) { + yield put(disconnect_by_user()); yield put(disconnect()); yield put(changedServer(server)); yield call([AsyncStorage, 'setItem'], 'currentServer', server); yield put(connectRequest(server)); }; - const validateServer = function* validateServer({ server }) { try { yield delay(1000); @@ -48,16 +47,14 @@ const addServer = function* addServer({ server }) { }; const handleGotoAddServer = function* handleGotoAddServer() { - yield put(logout()); yield call(AsyncStorage.removeItem, RocketChat.TOKEN_KEY); - yield delay(1000); yield call(NavigationService.navigate, 'AddServer'); }; const root = function* root() { yield takeLatest(SERVER.REQUEST, validateServer); - yield takeEvery(SERVER.SELECT, selectServer); - yield takeEvery(SERVER.ADD, addServer); - yield takeEvery(SERVER.GOTO_ADD, handleGotoAddServer); + yield takeLatest(SERVER.SELECT, selectServer); + yield takeLatest(SERVER.ADD, addServer); + yield takeLatest(SERVER.GOTO_ADD, handleGotoAddServer); }; export default root; diff --git a/app/views/ListServerView.js b/app/views/ListServerView.js index 30bf7ea43..4dccbc482 100644 --- a/app/views/ListServerView.js +++ b/app/views/ListServerView.js @@ -8,7 +8,6 @@ import { connect } from 'react-redux'; import { setServer } from '../actions/server'; import realm from '../lib/realm'; import Fade from '../animations/fade'; -import Banner from '../containers/Banner'; const styles = StyleSheet.create({ view: { @@ -184,7 +183,6 @@ export default class ListServerView extends React.Component { render() { return ( - ({ - validInstance: !state.server.failure, + validInstance: !state.server.failure && !state.server.connecting, validating: state.server.connecting }), dispatch => ({ validateServer: url => dispatch(serverRequest(url)), @@ -83,7 +44,7 @@ export default class NewServerView extends React.Component { this.setState({ editable: true }); this.adding = false; } - if (this.props.validInstance && !this.props.validating) { + if (this.props.validInstance) { this.props.navigation.goBack(); this.adding = false; } @@ -127,7 +88,7 @@ export default class NewServerView extends React.Component { if (this.props.validating) { return ( - Validating {this.state.url} ... + Validating {this.state.text} ... ); } @@ -149,27 +110,37 @@ export default class NewServerView extends React.Component { render() { return ( - - this.inputElement = ref} - style={styles.input} - onChangeText={this.onChangeText} - keyboardType='url' - autoCorrect={false} - returnKeyType='done' - autoCapitalize='none' - autoFocus - editable={this.state.editable} - onSubmitEditing={this.submit} - placeholder={this.state.defaultServer} - /> - + + this.inputElement = ref} + style={styles.input_white} + onChangeText={this.onChangeText} + keyboardType='url' + autoCorrect={false} + returnKeyType='done' + autoCapitalize='none' + autoFocus + editable={this.state.editable} + placeholder={this.state.defaultServer} + underlineColorAndroid='transparent' + /> + + Add + {this.renderValidation()} - + ); } diff --git a/app/views/RoomsListView/Header/index.js b/app/views/RoomsListView/Header/index.js index 1e5f1a4ed..a095bc58b 100644 --- a/app/views/RoomsListView/Header/index.js +++ b/app/views/RoomsListView/Header/index.js @@ -15,6 +15,7 @@ import styles from './styles'; @connect(state => ({ user: state.login.user, + connected: state.meteor.connected, baseUrl: state.settings.Site_Url }), dispatch => ({ setSearch: searchText => dispatch(setSearch(searchText)) @@ -23,6 +24,7 @@ export default class extends React.Component { static propTypes = { navigation: PropTypes.object.isRequired, user: PropTypes.object.isRequired, + connected: PropTypes.bool, baseUrl: PropTypes.string, setSearch: PropTypes.func } @@ -57,7 +59,7 @@ export default class extends React.Component { } getUserStatus() { - return this.props.user.status || 'offline'; + return (this.props.connected && this.props.user.status) || 'offline'; } getUserStatusLabel() { diff --git a/app/views/Styles.js b/app/views/Styles.js index 728b9e7c4..de5ba7b91 100644 --- a/app/views/Styles.js +++ b/app/views/Styles.js @@ -156,5 +156,14 @@ export default StyleSheet.create({ flexDirection: 'row', flexWrap: 'wrap', justifyContent: 'space-around' + }, + validText: { + color: 'green' + }, + invalidText: { + color: 'red' + }, + validatingText: { + color: '#aaa' } }); diff --git a/package-lock.json b/package-lock.json index 0f03eaf0b..82f2cff5a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -149,39 +149,26 @@ "resolved": "https://registry.npmjs.org/@hypnosphi/fuse.js/-/fuse.js-3.0.9.tgz", "integrity": "sha1-6pn2EhtKjwZbTHH4VZXbJxRJiAc=" }, - "@storybook/addon-actions": { - "version": "3.2.15", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-3.2.15.tgz", - "integrity": "sha512-j7vX0NQaIKaa5BHdzJkznck1K42Ai9IjXN0Vull1za/CYGz11xTXovLsANcK00j4jDGgjs4HAJbqSgEdH47SPA==", - "requires": { - "@storybook/addons": "3.2.15", - "deep-equal": "1.0.1", - "json-stringify-safe": "5.0.1", - "prop-types": "15.6.0", - "react-inspector": "2.2.1", - "uuid": "3.1.0" - } - }, - "@storybook/addon-links": { - "version": "3.2.15", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-3.2.15.tgz", - "integrity": "sha512-SjyWyCr0mOURYEjOcpQSP2DiWYkk0EHTq29S2pVjFBa07eT+MT1wSiNjRD/s5LsVA9xHHLjRAXLRKhslO3lcpQ==", - "requires": { - "@storybook/addons": "3.2.15" - } - }, "@storybook/addon-storyshots": { - "version": "3.2.15", - "resolved": "https://registry.npmjs.org/@storybook/addon-storyshots/-/addon-storyshots-3.2.15.tgz", - "integrity": "sha512-p2p2sZBr4oxNFkZfgm1nu8Fl67qLVTCZymkYIdEgpb5hdAvx4wJDOwR+pnc1QAJb6+0d+2TNwKRmasOVPrYd7w==", + "version": "3.2.18", + "resolved": "https://registry.npmjs.org/@storybook/addon-storyshots/-/addon-storyshots-3.2.18.tgz", + "integrity": "sha512-XHEMWSaDHvKsII7hOgCXyYjXrqZ9GCoPe+rjNzCvbd+vddM4lc3gwerq8Eze394yZzFWeSaSldfvSBkwqEGM+A==", "dev": true, "requires": { + "@storybook/channels": "3.2.18", + "babel-core": "6.26.0", "babel-runtime": "6.26.0", "global": "4.3.2", "prop-types": "15.6.0", "read-pkg-up": "3.0.0" }, "dependencies": { + "@storybook/channels": { + "version": "3.2.18", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-3.2.18.tgz", + "integrity": "sha512-7+3Kic5FRWyojff/CA4wfhI24xxbXmQzdVLx0gUZm8r4+h/3JSt8hVfhJeXkS+GEvo852PRS/AOHnN4ENKw9uw==", + "dev": true + }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -242,33 +229,14 @@ } } }, - "@storybook/addons": { - "version": "3.2.15", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-3.2.15.tgz", - "integrity": "sha512-fZ9XXOh4aUQvIFMDLmiK4gis7NbnFAZtYVs3+N+BqV6IpEvzHMr3eKdMc2O92j9+dkMd8J89OKwg/5AVFMGkMw==" - }, - "@storybook/channel-websocket": { - "version": "3.2.15", - "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-3.2.15.tgz", - "integrity": "sha512-cnrQA51oP3D5KJVz1+U7kuQx6m7BacgG4dUTg+B+R0ge3tCist+KgLCDTzoXTZAqus3RlgjVb+A+JrC1aMPP6A==", + "@storybook/mantra-core": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@storybook/mantra-core/-/mantra-core-1.7.2.tgz", + "integrity": "sha512-GD4OYJ8GsayVhIg306sfgcKDk9j8YfuSKIAWvdB/g7IDlw0pDgueONALVEEE2XWJtCwcsUyDtCYzXFgCBWLEjA==", "requires": { - "@storybook/channels": "3.2.15", - "global": "4.3.2" - } - }, - "@storybook/channels": { - "version": "3.2.15", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-3.2.15.tgz", - "integrity": "sha512-3SvmtL1+YpPaW42svIDN8xkmsb0aUyxyfmpcaaRS9BM/pjTrX+VPuSPZAwf6Dge9w41VuMx92ofMjLsCpRAXeQ==" - }, - "@storybook/components": { - "version": "3.2.15", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-3.2.15.tgz", - "integrity": "sha512-nrB9zZZCq3XsFFd6LL/1CRV4a93pYQbr5Sisfk0Yzj7V1tYNT8Z0QEXI0v+w0vdy9ogi+kq2YAxIy5CsAB7KyA==", - "requires": { - "glamor": "2.20.40", - "glamorous": "4.11.0", - "prop-types": "15.6.0" + "@storybook/react-komposer": "2.0.3", + "@storybook/react-simple-di": "1.3.0", + "babel-runtime": "6.26.0" } }, "@storybook/react-fuzzy": { @@ -282,17 +250,29 @@ "prop-types": "15.6.0" } }, - "@storybook/react-native": { - "version": "3.2.15", - "resolved": "https://registry.npmjs.org/@storybook/react-native/-/react-native-3.2.15.tgz", - "integrity": "sha512-IWwVKXwvauN6PyZgPaA/U+lljKxLgkRV4+6vyCKemm3UQdskpYqkW0hkOuvHZWLzalTNbk+xLK1CtiZd9XPdcA==", + "@storybook/react-komposer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@storybook/react-komposer/-/react-komposer-2.0.3.tgz", + "integrity": "sha512-DjL/XwZLNx79Rc1y0dyjxme64eUSJeJvajCN587sVDsVZIgsPlDWwmaohOCkPhR8HNGrY89qoeFZZxFslT203w==", "requires": { - "@storybook/addon-actions": "3.2.15", - "@storybook/addon-links": "3.2.15", - "@storybook/addons": "3.2.15", - "@storybook/channel-websocket": "3.2.15", - "@storybook/ui": "3.2.15", - "autoprefixer": "7.1.6", + "@storybook/react-stubber": "1.0.1", + "babel-runtime": "6.26.0", + "hoist-non-react-statics": "1.2.0", + "lodash.pick": "4.4.0", + "shallowequal": "0.2.2" + } + }, + "@storybook/react-native": { + "version": "3.2.18", + "resolved": "https://registry.npmjs.org/@storybook/react-native/-/react-native-3.2.18.tgz", + "integrity": "sha512-qA3RDobz6iTLtObz5xgp+qBJPtc/j9axOGRwehmgFptv8K2D2P/Sk7apDMQO22lZxk/INagWhdvoKm8NQYUQqg==", + "requires": { + "@storybook/addon-actions": "3.2.18", + "@storybook/addon-links": "3.2.18", + "@storybook/addons": "3.2.18", + "@storybook/channel-websocket": "3.2.18", + "@storybook/ui": "3.2.18", + "autoprefixer": "7.2.3", "babel-core": "6.26.0", "babel-loader": "7.1.2", "babel-plugin-syntax-async-functions": "6.13.0", @@ -309,7 +289,7 @@ "babel-preset-stage-0": "6.24.1", "babel-runtime": "6.26.0", "case-sensitive-paths-webpack-plugin": "2.1.1", - "commander": "2.11.0", + "commander": "2.12.2", "css-loader": "0.28.7", "events": "1.1.1", "express": "4.16.2", @@ -318,88 +298,336 @@ "global": "4.3.2", "json-loader": "0.5.7", "json5": "0.5.1", - "postcss-loader": "2.0.8", + "postcss-loader": "2.0.9", "prop-types": "15.6.0", "react-native-compat": "1.0.0", "react-native-iphone-x-helper": "1.0.1", "shelljs": "0.7.8", - "style-loader": "0.18.2", + "style-loader": "0.19.1", "url-loader": "0.6.2", "url-parse": "1.2.0", "util-deprecate": "1.0.2", "uuid": "3.1.0", - "webpack": "3.8.1", - "webpack-dev-middleware": "1.12.0", - "webpack-hot-middleware": "2.20.0", - "ws": "3.3.1" + "webpack": "3.10.0", + "webpack-dev-middleware": "1.12.2", + "webpack-hot-middleware": "2.21.0", + "ws": "3.3.3" }, "dependencies": { - "ws": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.1.tgz", - "integrity": "sha512-8A/uRMnQy8KCQsmep1m7Bk+z/+LIkeF7w+TDMLtX1iZm5Hq9HsUDmgFGaW1ACW5Cj0b2Qo7wCvRhYN2ErUVp/A==", + "@storybook/addon-actions": { + "version": "3.2.18", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-3.2.18.tgz", + "integrity": "sha512-jIbNxYXm3MyPECcPWZ9Vxuq31/rwq/oPXhfPpf4xD9sdQcfwm/5on2d75UJOXKio60xWagP4RpECz7d3uc6nJA==", "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.0" + "@storybook/addons": "3.2.18", + "deep-equal": "1.0.1", + "json-stringify-safe": "5.0.1", + "prop-types": "15.6.0", + "react-inspector": "2.2.2", + "uuid": "3.1.0" } - } - } - }, - "@storybook/ui": { - "version": "3.2.15", - "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-3.2.15.tgz", - "integrity": "sha512-TeEInIbO80psTpy9WMkkkUo814b7RnVM+fGu7igEiqJjcmnwt4gUrOJ9bzSBMJcNZSnE1hu5i5MSwLWyDjJakQ==", - "requires": { - "@hypnosphi/fuse.js": "3.0.9", - "@storybook/components": "3.2.15", - "@storybook/react-fuzzy": "0.4.3", - "babel-runtime": "6.26.0", - "deep-equal": "1.0.1", - "events": "1.1.1", - "global": "4.3.2", - "json-stringify-safe": "5.0.1", - "keycode": "2.1.9", - "lodash.debounce": "4.0.8", - "lodash.pick": "4.4.0", - "lodash.sortby": "4.7.0", - "mantra-core": "1.7.0", - "podda": "1.2.2", - "prop-types": "15.6.0", - "qs": "6.5.1", - "react-icons": "2.2.7", - "react-inspector": "2.2.1", - "react-komposer": "2.0.0", - "react-modal": "3.1.2", - "react-split-pane": "0.1.70", - "react-treebeard": "2.1.0", - "redux": "3.7.2" - }, - "dependencies": { + }, + "@storybook/addon-links": { + "version": "3.2.18", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-3.2.18.tgz", + "integrity": "sha512-X96TNRA0x0rWWVweIQCDM84GJdQpAXQutxnARvskV0RD6bf8Bhq7nw3FVzElNilnFyfhtFzYVqCUlEOAJcKEgg==", + "requires": { + "@storybook/addons": "3.2.18" + } + }, + "@storybook/addons": { + "version": "3.2.18", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-3.2.18.tgz", + "integrity": "sha512-I1oJhimBZiyrDa2UxorXhBBGapAIa+KxF8thtCUWmFgToeWhlHnRepQiRE+mCDM2yjSQpmTN+md/W8DPcLIHag==" + }, + "@storybook/channel-websocket": { + "version": "3.2.18", + "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-3.2.18.tgz", + "integrity": "sha512-P1faqKO+uD653Q9RvOu+upFJyUFU9kAag9fIGfNq4tUHnDK1HFbCe97MxOwytaxROYmi0OKjhOZgxyH60bBZug==", + "requires": { + "@storybook/channels": "3.2.18", + "global": "4.3.2" + } + }, + "@storybook/channels": { + "version": "3.2.18", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-3.2.18.tgz", + "integrity": "sha512-7+3Kic5FRWyojff/CA4wfhI24xxbXmQzdVLx0gUZm8r4+h/3JSt8hVfhJeXkS+GEvo852PRS/AOHnN4ENKw9uw==" + }, + "@storybook/components": { + "version": "3.2.18", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-3.2.18.tgz", + "integrity": "sha512-jvwUewMiwG+svDqLxu6YyHQdBdvDQ5etA5dUplpx7aPW4bZog+DHkZ0RLgwHadxbeff1qs/RXlz23D3El6BDxA==", + "requires": { + "glamor": "2.20.40", + "glamorous": "4.11.0", + "prop-types": "15.6.0" + } + }, + "@storybook/ui": { + "version": "3.2.18", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-3.2.18.tgz", + "integrity": "sha512-n3j//YF5gbTRZHrdIREGK8C+weaCF/pu4iWKu4Pty8rbMjrghkgrhENga2XaFvEOfTsBUc2ldXCCjNw0tJOGWg==", + "requires": { + "@hypnosphi/fuse.js": "3.0.9", + "@storybook/components": "3.2.18", + "@storybook/mantra-core": "1.7.2", + "@storybook/react-fuzzy": "0.4.3", + "@storybook/react-komposer": "2.0.3", + "babel-runtime": "6.26.0", + "deep-equal": "1.0.1", + "events": "1.1.1", + "global": "4.3.2", + "json-stringify-safe": "5.0.1", + "keycode": "2.1.9", + "lodash.debounce": "4.0.8", + "lodash.pick": "4.4.0", + "lodash.sortby": "4.7.0", + "podda": "1.2.2", + "prop-types": "15.6.0", + "qs": "6.5.1", + "react-icons": "2.2.7", + "react-inspector": "2.2.2", + "react-modal": "3.1.10", + "react-split-pane": "0.1.72", + "react-treebeard": "2.1.0", + "redux": "3.7.2" + } + }, + "autoprefixer": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.3.tgz", + "integrity": "sha512-dqzVGiz3v934+s3YZA6nk7tAs9xuTz5wMJbX1M+L4cY/MTNkOUqP61c1GWkEVlUL/PEy1pKRSCFuoRZrXYx9qA==", + "requires": { + "browserslist": "2.10.0", + "caniuse-lite": "1.0.30000784", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "6.0.14", + "postcss-value-parser": "3.3.0" + } + }, + "browserslist": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.10.0.tgz", + "integrity": "sha512-WyvzSLsuAVPOjbljXnyeWl14Ae+ukAT8MUuagKVzIDvwBxl4UAwD1xqtyQs2eWYPGUKMeC3Ol62goqYuKqTTcw==", + "requires": { + "caniuse-lite": "1.0.30000784", + "electron-to-chromium": "1.3.29" + } + }, + "caniuse-lite": { + "version": "1.0.30000784", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000784.tgz", + "integrity": "sha1-EpztdOmhKApEGIC2zSvOMO9Z5sA=" + }, + "commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==" + }, + "electron-to-chromium": { + "version": "1.3.29", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.29.tgz", + "integrity": "sha1-elgja5VGjD52YAkTSFItZddzazY=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "postcss-loader": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.0.9.tgz", + "integrity": "sha512-sgoXPtmgVT3aBAhU47Kig8oPF+mbXl8Unjvtz1Qj1q2D2EvSVJW2mKJNzxv5y/LvA9xWwuvdysvhc7Zn80UWWw==", + "requires": { + "loader-utils": "1.1.0", + "postcss": "6.0.14", + "postcss-load-config": "1.2.0", + "schema-utils": "0.3.0" + } + }, "qs": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, - "react-komposer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-komposer/-/react-komposer-2.0.0.tgz", - "integrity": "sha1-uWRzgBSptK7klKg8C1uDPWYHKpA=", + "react-inspector": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-2.2.2.tgz", + "integrity": "sha512-SzkmYvVUJEmUBuFwGgaGOTGucUBnKXH2wWFdzatkCrawm4P85eqgYvqevHE3DGWpfXqE1pJO4d98TYUANQGCrg==", "requires": { "babel-runtime": "6.26.0", - "hoist-non-react-statics": "1.2.0", - "lodash.pick": "4.4.0", - "react-stubber": "1.0.0", - "shallowequal": "0.2.2" + "is-dom": "1.0.9" + } + }, + "react-modal": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.1.10.tgz", + "integrity": "sha512-7b77AGWCkdg0YOf/qcYIGCpuwbxRwOA8P3UrUovk4grUNv+idOmHovJAx/Dcd3fuwHtgixxVjpcjVG60985MSA==", + "requires": { + "exenv": "1.2.2", + "prop-types": "15.6.0", + "warning": "3.0.0" + } + }, + "react-split-pane": { + "version": "0.1.72", + "resolved": "https://registry.npmjs.org/react-split-pane/-/react-split-pane-0.1.72.tgz", + "integrity": "sha512-9dFQsCLNsz9SYBr61kcHUoMsyNtaB2sHNIMtaMX4RJjUWlRGnDqoGYeCnH+C+y6VbWSC7lBKpwibF83e5pdQNg==", + "requires": { + "@types/inline-style-prefixer": "3.0.1", + "@types/react": "16.0.22", + "fast-deep-equal": "1.0.0", + "inline-style-prefixer": "3.0.8", + "prop-types": "15.6.0", + "react-style-proptype": "3.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "style-loader": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.1.tgz", + "integrity": "sha512-IRE+ijgojrygQi3rsqT0U4dd+UcPCqcVvauZpCnQrGAlEe+FUIyrK93bUDScamesjP08JlQNsFJU+KmPedP5Og==", + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=" + }, + "webpack": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz", + "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==", + "requires": { + "acorn": "5.2.1", + "acorn-dynamic-import": "2.0.2", + "ajv": "5.3.0", + "ajv-keywords": "2.1.1", + "async": "2.6.0", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", + "interpret": "1.0.4", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.0.0", + "source-map": "0.5.7", + "supports-color": "4.5.0", + "tapable": "0.2.8", + "uglifyjs-webpack-plugin": "0.4.6", + "watchpack": "1.4.0", + "webpack-sources": "1.0.2", + "yargs": "8.0.2" + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "requires": { + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.0.3", + "time-stamp": "2.0.0" + } + }, + "webpack-hot-middleware": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.21.0.tgz", + "integrity": "sha512-P6xiOLy10QlSVSO7GanU9PLxN6zLLQ7RG16MPTvmFwf2KUG7jMp6m+fmdgsR7xoaVVLA7OlX3YO6JjoZEKjCuA==", + "requires": { + "ansi-html": "0.0.7", + "html-entities": "1.2.1", + "querystring": "0.2.0", + "strip-ansi": "3.0.1" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.0" + } + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" } } } }, + "@storybook/react-simple-di": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@storybook/react-simple-di/-/react-simple-di-1.3.0.tgz", + "integrity": "sha512-RH6gPQaYMs/VzQX2dgbZU8DQMKFXVOv1ruohHjjNPys4q+YdqMFMDe5jOP1AUE3j9g01x0eW7bVjRawSpl++Ew==", + "requires": { + "babel-runtime": "6.26.0", + "create-react-class": "15.6.2", + "hoist-non-react-statics": "1.2.0", + "prop-types": "15.6.0" + } + }, + "@storybook/react-stubber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@storybook/react-stubber/-/react-stubber-1.0.1.tgz", + "integrity": "sha512-k+CHH+vA8bQfCmzBTtJsPkITFgD+C/w19KuByZ9WeEvNUFtnDaCqfP+Vp3/OR+3IAfAXYYOWolqPLxNPcEqEjw==", + "requires": { + "babel-runtime": "6.26.0" + } + }, "@types/inline-style-prefixer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/inline-style-prefixer/-/inline-style-prefixer-3.0.1.tgz", "integrity": "sha512-+kbOcYW1/noncDwRryRoB9tH87IYcMfdBGvw98iocK39LtTA2DFL7agmk4UHW/GxjzVfwrxfjlLrqrgA7MCtmg==" }, + "@types/node": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.5.2.tgz", + "integrity": "sha512-KA4GKOpgXnrqEH2eCVhiv2CsxgXGQJgV1X0vsGlh+WCnxbeAE1GT44ZsTU1IN5dEeV/gDupKa7gWo08V5IxWVQ==", + "dev": true + }, "@types/react": { "version": "16.0.22", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.0.22.tgz", @@ -450,23 +678,6 @@ } } }, - "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", - "dev": true, - "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, "acorn-jsx": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", @@ -810,19 +1021,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "autoprefixer": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.6.tgz", - "integrity": "sha512-C9yv/UF3X+eJTi/zvfxuyfxmLibYrntpF3qoJYrMeQwgUJOZrZvpJiMG2FMQ3qnhWtF/be4pYONBBw95ZGe3vA==", - "requires": { - "browserslist": "2.9.0", - "caniuse-lite": "1.0.30000760", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.14", - "postcss-value-parser": "3.3.0" - } - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -1105,13 +1303,31 @@ } }, "babel-jest": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-21.2.0.tgz", - "integrity": "sha512-O0W2qLoWu1QOoOGgxiR2JID4O6WSpxPiQanrkyi9SSlM0PJ60Ptzlck47lhtnr9YZO3zYOsxHwnyeWJ6AffoBQ==", + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.0.3.tgz", + "integrity": "sha512-vIJAdq0YuLwg5TF6DDvcSFYx+Cqb9f2pTzC3ZcpGUBeysUUzPxZ6J3WVvuFMzpxgHa23tDKlNivDN9C4jIAKUQ==", "dev": true, "requires": { "babel-plugin-istanbul": "4.1.5", - "babel-preset-jest": "21.2.0" + "babel-preset-jest": "22.0.3" + }, + "dependencies": { + "babel-plugin-jest-hoist": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.0.3.tgz", + "integrity": "sha512-Z0pOZFs0xDctwF0bPEKrnAzvbbgDi2vDFbQ0EdofnLI2bOa3P1H66gNLb2vMJJaa00VDjfiGhIocsHvBkqtyEQ==", + "dev": true + }, + "babel-preset-jest": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.0.3.tgz", + "integrity": "sha512-FbMMniSMXFvkKldCf+e4Tuol/v3XMaIpIp8xiT1WFlEW3ZapTKDW9YgVt3hqcpZXsIGFf6eUF3Owxom7yFlI8w==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "22.0.3", + "babel-plugin-syntax-object-rest-spread": "6.13.0" + } + } } }, "babel-loader": { @@ -1159,12 +1375,6 @@ "test-exclude": "4.1.1" } }, - "babel-plugin-jest-hoist": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz", - "integrity": "sha512-yi5QuiVyyvhBUDLP4ButAnhYzkdrUwWDtvUJv71hjH3fclhnZg4HkDeqaitcR2dZZx/E67kGkRcPVjtVu+SJfQ==", - "dev": true - }, "babel-plugin-minify-builtins": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.2.0.tgz", @@ -1983,16 +2193,6 @@ "babel-plugin-transform-flow-strip-types": "6.22.0" } }, - "babel-preset-jest": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz", - "integrity": "sha512-hm9cBnr2h3J7yXoTtAVV0zg+3vg0Q/gT2GYuzlreTU0EPkJRtlNgKJJ3tBKEn0+VjAi3JykV6xCJkuUYttEEfA==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "21.2.0", - "babel-plugin-syntax-object-rest-spread": "6.13.0" - } - }, "babel-preset-minify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.2.0.tgz", @@ -2149,7 +2349,7 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" + "regenerator-runtime": "0.11.1" } }, "babel-template": { @@ -2260,6 +2460,13 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=" }, + "bindings": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", + "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==", + "dev": true, + "optional": true + }, "bl": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", @@ -2462,6 +2669,12 @@ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, + "browser-process-hrtime": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", + "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", + "dev": true + }, "browser-resolve": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", @@ -4167,6 +4380,12 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.2.tgz", "integrity": "sha1-ca1dIEvxempsqPRQxhRUBm70YeE=" }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, "diff": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", @@ -4216,6 +4435,12 @@ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=" }, + "domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.0.tgz", + "integrity": "sha512-WpwuBlZ2lQRFa4H/4w49deb9rJLot9KmqrKKjMc9qBl7CID+DdC2swoa34ccRl+anL2B6bLp6TjFdIdnzekMBQ==", + "dev": true + }, "dot-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", @@ -4313,6 +4538,11 @@ "minimalistic-crypto-utils": "1.0.1" } }, + "email-validator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/email-validator/-/email-validator-1.1.1.tgz", + "integrity": "sha512-vkcJJZEb7JXDY883Nx1Lkmb6noM3j1SfSt8L9tVFhZPnPQiFq+Nkd5evc77+tRVS4ChTUSr34voThsglI/ja/A==" + }, "emoji-regex": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", @@ -4765,9 +4995,9 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.2.tgz", - "integrity": "sha1-ZZJ3p1iwNsMFp+ShMFfDAc075z8=", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz", + "integrity": "sha1-VFg9GuRCSDFi4EDhPMMYZUZRAOU=", "dev": true, "requires": { "aria-query": "0.7.0", @@ -4776,7 +5006,18 @@ "axobject-query": "0.1.0", "damerau-levenshtein": "1.0.4", "emoji-regex": "6.5.1", - "jsx-ast-utils": "1.4.1" + "jsx-ast-utils": "2.0.1" + }, + "dependencies": { + "jsx-ast-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", + "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "dev": true, + "requires": { + "array-includes": "3.0.3" + } + } } }, "eslint-plugin-react": { @@ -4953,31 +5194,6 @@ "fill-range": "2.2.3" } }, - "expect": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-21.2.1.tgz", - "integrity": "sha512-orfQQqFRTX0jH7znRIGi8ZMR8kTNpXklTTz8+HGTpmTKZo3Occ6JNB5FXMb8cRuiiC/GyDqsr30zUa66ACYlYw==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "jest-diff": "21.2.1", - "jest-get-type": "21.2.0", - "jest-matcher-utils": "21.2.1", - "jest-message-util": "21.2.1", - "jest-regex-util": "21.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - } - } - }, "express": { "version": "4.16.2", "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", @@ -7507,27 +7723,18 @@ } }, "jest": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-21.2.1.tgz", - "integrity": "sha512-mXN0ppPvWYoIcC+R+ctKxAJ28xkt/Z5Js875padm4GbgUn6baeR5N4Ng6LjatIRpUQDZVJABT7Y4gucFjPryfw==", + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-22.0.3.tgz", + "integrity": "sha512-90H1wLqiNR3tLhQUgwhC6GWHfRCG+Da14m7vxD608Mt/QTKR0TA751D+QH09x5bvcrLfvxLtxArtA0VEC0ORow==", "dev": true, "requires": { - "jest-cli": "21.2.1" - } - }, - "jest-changed-files": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-21.2.0.tgz", - "integrity": "sha512-+lCNP1IZLwN1NOIvBcV5zEL6GENK6TXrDj4UxWIeLvIsIDa+gf6J7hkqsW2qVVt/wvH65rVvcPwqXdps5eclTQ==", - "dev": true, - "requires": { - "throat": "4.1.0" + "jest-cli": "22.0.3" } }, "jest-cli": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-21.2.1.tgz", - "integrity": "sha512-T1BzrbFxDIW/LLYQqVfo94y/hhaj1NzVQkZgBumAC+sxbjMROI7VkihOdxNR758iYbQykL2ZOWUBurFgkQrzdg==", + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.0.3.tgz", + "integrity": "sha512-aX71DL4q9aLxbSmYI8uuPVlXVRyREU4VbApOdiuD79oqqqSGYu9E5S1SLXRm/PB5lJPh5xd8bVRrdsrMVs2hyw==", "dev": true, "requires": { "ansi-escapes": "3.0.0", @@ -7539,614 +7746,56 @@ "istanbul-lib-coverage": "1.1.1", "istanbul-lib-instrument": "1.9.1", "istanbul-lib-source-maps": "1.2.2", - "jest-changed-files": "21.2.0", - "jest-config": "21.2.1", - "jest-environment-jsdom": "21.2.1", - "jest-haste-map": "21.2.0", - "jest-message-util": "21.2.1", - "jest-regex-util": "21.2.0", - "jest-resolve-dependencies": "21.2.0", - "jest-runner": "21.2.1", - "jest-runtime": "21.2.1", - "jest-snapshot": "21.2.1", - "jest-util": "21.2.1", + "jest-changed-files": "22.0.3", + "jest-config": "22.0.3", + "jest-environment-jsdom": "22.0.3", + "jest-get-type": "22.0.3", + "jest-haste-map": "22.0.3", + "jest-message-util": "22.0.3", + "jest-regex-util": "22.0.3", + "jest-resolve-dependencies": "22.0.3", + "jest-runner": "22.0.3", + "jest-runtime": "22.0.3", + "jest-snapshot": "22.0.3", + "jest-util": "22.0.3", + "jest-worker": "22.0.3", "micromatch": "2.3.11", "node-notifier": "5.1.2", - "pify": "3.0.0", + "realpath-native": "1.0.0", + "rimraf": "2.6.2", "slash": "1.0.0", "string-length": "2.0.0", "strip-ansi": "4.0.0", "which": "1.3.0", - "worker-farm": "1.5.1", - "yargs": "9.0.1" + "yargs": "10.0.3" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "@babel/code-frame": { + "version": "7.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.35.tgz", + "integrity": "sha512-l0SE8cl9DUIY4hYAFAKTLX3F2Yr14Qri7uTsuI7iegB5E4KyQy4XY72L3VOxmj6kwR/RDQURoKYr2NzyETGo7A==", "dev": true, "requires": { - "color-convert": "1.9.1" + "chalk": "2.3.0", + "esutils": "2.0.2", + "js-tokens": "3.0.2" } }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "acorn-globals": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", + "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "acorn": "5.2.1" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "jest-config": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-21.2.1.tgz", - "integrity": "sha512-fJru5HtlD/5l2o25eY9xT0doK3t2dlglrqoGpbktduyoI0T5CwuB++2YfoNZCrgZipTwPuAGonYv0q7+8yDc/A==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "glob": "7.1.2", - "jest-environment-jsdom": "21.2.1", - "jest-environment-node": "21.2.1", - "jest-get-type": "21.2.0", - "jest-jasmine2": "21.2.1", - "jest-regex-util": "21.2.0", - "jest-resolve": "21.2.0", - "jest-util": "21.2.1", - "jest-validate": "21.2.1", - "pretty-format": "21.2.1" - }, - "dependencies": { "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "pretty-format": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-21.2.1.tgz", - "integrity": "sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==", - "dev": true, - "requires": { - "ansi-regex": "3.0.0", - "ansi-styles": "3.2.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "jest-diff": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-21.2.1.tgz", - "integrity": "sha512-E5fu6r7PvvPr5qAWE1RaUwIh/k6Zx/3OOkZ4rk5dBJkEWRrUuSgbMt2EO8IUTPTd6DOqU3LW6uTIwX5FRvXoFA==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "diff": "3.4.0", - "jest-get-type": "21.2.0", - "pretty-format": "21.2.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "pretty-format": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-21.2.1.tgz", - "integrity": "sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==", - "dev": true, - "requires": { - "ansi-regex": "3.0.0", - "ansi-styles": "3.2.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "jest-docblock": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", - "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==" - }, - "jest-environment-jsdom": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-21.2.1.tgz", - "integrity": "sha512-mecaeNh0eWmzNrUNMWARysc0E9R96UPBamNiOCYL28k7mksb1d0q6DD38WKP7ABffjnXyUWJPVaWRgUOivwXwg==", - "dev": true, - "requires": { - "jest-mock": "21.2.0", - "jest-util": "21.2.1", - "jsdom": "9.12.0" - } - }, - "jest-environment-node": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-21.2.1.tgz", - "integrity": "sha512-R211867wx9mVBVHzrjGRGTy5cd05K7eqzQl/WyZixR/VkJ4FayS8qkKXZyYnwZi6Rxo6WEV81cDbiUx/GfuLNw==", - "dev": true, - "requires": { - "jest-mock": "21.2.0", - "jest-util": "21.2.1" - } - }, - "jest-get-type": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-21.2.0.tgz", - "integrity": "sha512-y2fFw3C+D0yjNSDp7ab1kcd6NUYfy3waPTlD8yWkAtiocJdBRQqNoRqVfMNxgj+IjT0V5cBIHJO0z9vuSSZ43Q==", - "dev": true - }, - "jest-haste-map": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-21.2.0.tgz", - "integrity": "sha512-5LhsY/loPH7wwOFRMs+PT4aIAORJ2qwgbpMFlbWbxfN0bk3ZCwxJ530vrbSiTstMkYLao6JwBkLhCJ5XbY7ZHw==", - "requires": { - "fb-watchman": "2.0.0", - "graceful-fs": "4.1.11", - "jest-docblock": "21.2.0", - "micromatch": "2.3.11", - "sane": "2.2.0", - "worker-farm": "1.5.1" - } - }, - "jest-jasmine2": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-21.2.1.tgz", - "integrity": "sha512-lw8FXXIEekD+jYNlStfgNsUHpfMWhWWCgHV7n0B7mA/vendH7vBFs8xybjQsDzJSduptBZJHqQX9SMssya9+3A==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "expect": "21.2.1", - "graceful-fs": "4.1.11", - "jest-diff": "21.2.1", - "jest-matcher-utils": "21.2.1", - "jest-message-util": "21.2.1", - "jest-snapshot": "21.2.1", - "p-cancelable": "0.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "jest-matcher-utils": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz", - "integrity": "sha512-kn56My+sekD43dwQPrXBl9Zn9tAqwoy25xxe7/iY4u+mG8P3ALj5IK7MLHZ4Mi3xW7uWVCjGY8cm4PqgbsqMCg==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "jest-get-type": "21.2.0", - "pretty-format": "21.2.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "pretty-format": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-21.2.1.tgz", - "integrity": "sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==", - "dev": true, - "requires": { - "ansi-regex": "3.0.0", - "ansi-styles": "3.2.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "jest-message-util": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-21.2.1.tgz", - "integrity": "sha512-EbC1X2n0t9IdeMECJn2BOg7buOGivCvVNjqKMXTzQOu7uIfLml+keUfCALDh8o4rbtndIeyGU8/BKfoTr/LVDQ==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "micromatch": "2.3.11", - "slash": "1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "jest-mock": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-21.2.0.tgz", - "integrity": "sha512-aZDfyVf0LEoABWiY6N0d+O963dUQSyUa4qgzurHR3TBDPen0YxKCJ6l2i7lQGh1tVdsuvdrCZ4qPj+A7PievCw==", - "dev": true - }, - "jest-regex-util": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-21.2.0.tgz", - "integrity": "sha512-BKQ1F83EQy0d9Jen/mcVX7D+lUt2tthhK/2gDWRgLDJRNOdRgSp1iVqFxP8EN1ARuypvDflRfPzYT8fQnoBQFQ==", - "dev": true - }, - "jest-resolve": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-21.2.0.tgz", - "integrity": "sha512-vefQ/Lr+VdNvHUZFQXWtOqHX3HEdOc2MtSahBO89qXywEbUxGPB9ZLP9+BHinkxb60UT2Q/tTDOS6rYc6Mwigw==", - "dev": true, - "requires": { - "browser-resolve": "1.11.2", - "chalk": "2.3.0", - "is-builtin-module": "1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-21.2.0.tgz", - "integrity": "sha512-ok8ybRFU5ScaAcfufIQrCbdNJSRZ85mkxJ1EhUp8Bhav1W1/jv/rl1Q6QoVQHObNxmKnbHVKrfLZbCbOsXQ+bQ==", - "dev": true, - "requires": { - "jest-regex-util": "21.2.0" - } - }, - "jest-runner": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-21.2.1.tgz", - "integrity": "sha512-Anb72BOQlHqF/zETqZ2K20dbYsnqW/nZO7jV8BYENl+3c44JhMrA8zd1lt52+N7ErnsQMd2HHKiVwN9GYSXmrg==", - "dev": true, - "requires": { - "jest-config": "21.2.1", - "jest-docblock": "21.2.0", - "jest-haste-map": "21.2.0", - "jest-jasmine2": "21.2.1", - "jest-message-util": "21.2.1", - "jest-runtime": "21.2.1", - "jest-util": "21.2.1", - "pify": "3.0.0", - "throat": "4.1.0", - "worker-farm": "1.5.1" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "jest-runtime": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-21.2.1.tgz", - "integrity": "sha512-6omlpA3+NSE+rHwD0PQjNEjZeb2z+oRmuehMfM1tWQVum+E0WV3pFt26Am0DUfQkkPyTABvxITRjCUclYgSOsA==", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-jest": "21.2.0", - "babel-plugin-istanbul": "4.1.5", - "chalk": "2.3.0", - "convert-source-map": "1.5.0", - "graceful-fs": "4.1.11", - "jest-config": "21.2.1", - "jest-haste-map": "21.2.0", - "jest-regex-util": "21.2.0", - "jest-resolve": "21.2.0", - "jest-util": "21.2.1", - "json-stable-stringify": "1.0.1", - "micromatch": "2.3.11", - "slash": "1.0.0", - "strip-bom": "3.0.0", - "write-file-atomic": "2.3.0", - "yargs": "9.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - } - } - } - }, - "jest-snapshot": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-21.2.1.tgz", - "integrity": "sha512-bpaeBnDpdqaRTzN8tWg0DqOTo2DvD3StOemxn67CUd1p1Po+BUpvePAp44jdJ7Pxcjfg+42o4NHw1SxdCA2rvg==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "jest-diff": "21.2.1", - "jest-matcher-utils": "21.2.1", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "pretty-format": "21.2.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "pretty-format": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-21.2.1.tgz", - "integrity": "sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==", - "dev": true, - "requires": { - "ansi-regex": "3.0.0", - "ansi-styles": "3.2.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "jest-util": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-21.2.1.tgz", - "integrity": "sha512-r20W91rmHY3fnCoO7aOAlyfC51x2yeV3xF+prGsJAUsYhKeV670ZB8NO88Lwm7ASu8SdH0S+U+eFf498kjhA4g==", - "dev": true, - "requires": { - "callsites": "2.0.0", - "chalk": "2.3.0", - "graceful-fs": "4.1.11", - "jest-message-util": "21.2.1", - "jest-mock": "21.2.0", - "jest-validate": "21.2.1", - "mkdirp": "0.5.1" - }, - "dependencies": { "ansi-styles": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", @@ -8173,6 +7822,351 @@ "supports-color": "4.5.0" } }, + "expect": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-22.0.3.tgz", + "integrity": "sha512-QapzeQkcA3jCx4pDnD07I4SPPxScKbey8TD/WwrnzmpHmL5q0dUtXfUt5OIFOjVBCg+C4zn4Y1zK9Rb9SIDL1g==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "jest-diff": "22.0.3", + "jest-get-type": "22.0.3", + "jest-matcher-utils": "22.0.3", + "jest-message-util": "22.0.3", + "jest-regex-util": "22.0.3" + } + }, + "jest-changed-files": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.0.3.tgz", + "integrity": "sha512-CG7eNJNO9x1O/3J4Uhe2QXra1MnC9+KS1f2NeOg+7iQ+8dDCgxCtpusmKfu44TnEyKwkIDhDr6htPfPaI+Fwbw==", + "dev": true, + "requires": { + "throat": "4.1.0" + } + }, + "jest-config": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.0.3.tgz", + "integrity": "sha512-omqyzFPhRm+YaHku+jPuqpSFJ0QD61G/hqR+m09r2IajJbaRjV9XDezCIOD+rJiQlAyfFfo+DAc+u1mLy2IEaA==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "glob": "7.1.2", + "jest-environment-jsdom": "22.0.3", + "jest-environment-node": "22.0.3", + "jest-get-type": "22.0.3", + "jest-jasmine2": "22.0.3", + "jest-regex-util": "22.0.3", + "jest-resolve": "22.0.3", + "jest-util": "22.0.3", + "jest-validate": "22.0.3", + "pretty-format": "22.0.3" + } + }, + "jest-diff": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.0.3.tgz", + "integrity": "sha512-Y7xN9Lc/NgFvR14lvjrJXB6x2x1LLe5NnMyzLvilBSSOyjy9uAVnR2Bt1YgzdfRrfaxsx7xFUVcqXLUnPkrJcA==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "diff": "3.4.0", + "jest-get-type": "22.0.3", + "pretty-format": "22.0.3" + } + }, + "jest-docblock": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-22.0.3.tgz", + "integrity": "sha512-LhviP2rqIg2IzS6m97W7T032oMrT699Tr6Njjhhl4FCLj+75BUy9CsSmGgfoVEql1uc+myBkssvcbn7T9xDR+A==", + "dev": true, + "requires": { + "detect-newline": "2.1.0" + } + }, + "jest-environment-jsdom": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.0.3.tgz", + "integrity": "sha512-LrR9flT6I4IZKIA/dmoAiTmTzGi7W8sP5mCXbgsTjFop1Jh3rNluza/xnf6VfK/aOZvBglJIVYbKqGxtcm0KsQ==", + "dev": true, + "requires": { + "jest-mock": "22.0.3", + "jest-util": "22.0.3", + "jsdom": "11.5.1" + } + }, + "jest-environment-node": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.0.3.tgz", + "integrity": "sha512-Kk7FYtCQZ+CFwwCL1t3DJ/Lxvjoda4qRt/NJh/6jsAEWM7VcSBAzmmayA5JcMRpQQ4FRiUcLrvrKEfO01/Fgsw==", + "dev": true, + "requires": { + "jest-mock": "22.0.3", + "jest-util": "22.0.3" + } + }, + "jest-get-type": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.0.3.tgz", + "integrity": "sha512-TaJnc/lnJQ3jwry+NUWkqaJmKrM/Ut3XdK89HfiqdI3DMRLd6Zb4wyKjwuNP37MEQqlNg0YWH4sbBR8D4exjCA==", + "dev": true + }, + "jest-haste-map": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.0.3.tgz", + "integrity": "sha512-VosIMOFQFu1rTF+MvOWVuv2KVmZ9eTkRgfwW2yUAs6/AhwmIfXRl/tih+fIOYcHzU4Auu1G8Fvl2kkF5g0k6/A==", + "dev": true, + "requires": { + "fb-watchman": "2.0.0", + "graceful-fs": "4.1.11", + "jest-docblock": "22.0.3", + "jest-worker": "22.0.3", + "micromatch": "2.3.11", + "sane": "2.2.0" + } + }, + "jest-jasmine2": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.0.3.tgz", + "integrity": "sha512-0Gz3pFZytCjbCKssBJWzx5NolNLg179gkT0Zfe+fWrJS9Ap9EH7eTB9UHoiT2O3lRNBfaYTzrXhOMgf4l/jCMg==", + "dev": true, + "requires": { + "callsites": "2.0.0", + "chalk": "2.3.0", + "expect": "22.0.3", + "graceful-fs": "4.1.11", + "jest-diff": "22.0.3", + "jest-matcher-utils": "22.0.3", + "jest-message-util": "22.0.3", + "jest-snapshot": "22.0.3", + "source-map-support": "0.5.0" + } + }, + "jest-matcher-utils": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.0.3.tgz", + "integrity": "sha512-FJbKpCR3K7YYE/Pnvy5OrLFgPEswpYWIfVtdwT2NC6pBARbYGX39KF3bTxS9yg2mv0YL2zHe3UbwzFsi9nFpVA==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "jest-get-type": "22.0.3", + "pretty-format": "22.0.3" + } + }, + "jest-message-util": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.0.3.tgz", + "integrity": "sha512-AVBdCx7Oj5wBpMOH089lx7Zgwpdz9HbReA82HuVAlIT4kEQRvCy6Sl9yVWDGJwHTgB/OYQGkgmbv/P/K8TkWNw==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.35", + "chalk": "2.3.0", + "micromatch": "2.3.11", + "slash": "1.0.0", + "stack-utils": "1.0.1" + } + }, + "jest-mock": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.0.3.tgz", + "integrity": "sha512-donODXcDG03EAEavc9xfJ7fBF/LNVjoZYkmj9DLrQ1B9YcT6wh8Xx7IYg25b8V/8F/eXPMAE0KK5q6Fqe6yAeg==", + "dev": true + }, + "jest-regex-util": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.0.3.tgz", + "integrity": "sha512-mplC9chiAotES3ClzNhy0SJcfHB2DivooKJZW+2hDdvP8LLB+OUI+D6bJd7sncbKUsyFcmblEvpm/zz/hef7HA==", + "dev": true + }, + "jest-resolve": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.0.3.tgz", + "integrity": "sha512-UHpim1kXTXH5hlftIpVOUkh0n+wd36/QNuYgpZnzwX8PsB8DizBuaPJbl5VvorHBpRouz21Ty0K0QM1pPny9cw==", + "dev": true, + "requires": { + "browser-resolve": "1.11.2", + "chalk": "2.3.0" + } + }, + "jest-resolve-dependencies": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.0.3.tgz", + "integrity": "sha512-u9MUNJIa9GJ0YFhvM0+Scr4tyX84nC42d3w18Cly1doY7pTT+9momm+TncpuDlFyB2aNmS8SfdEbiLr1e6tBwg==", + "dev": true, + "requires": { + "jest-regex-util": "22.0.3" + } + }, + "jest-runner": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.0.3.tgz", + "integrity": "sha512-b/Eh+bPFLU09R0AULy4/IcUQ4Cgiao7YcmCehI7eailVj2xGQAfhmzSlhDpVIYmvoRZFyReOseihZXXRsdFafA==", + "dev": true, + "requires": { + "jest-config": "22.0.3", + "jest-docblock": "22.0.3", + "jest-haste-map": "22.0.3", + "jest-jasmine2": "22.0.3", + "jest-leak-detector": "22.0.3", + "jest-message-util": "22.0.3", + "jest-runtime": "22.0.3", + "jest-util": "22.0.3", + "jest-worker": "22.0.3", + "throat": "4.1.0" + } + }, + "jest-runtime": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.0.3.tgz", + "integrity": "sha512-SSOiAde16JhEtVtNaWV2OmimmyxP8lmUdHxYde5rwv7iibkRy/o4QtalmmmH48oUxwy/epZVDaEyBKBA/iDFBg==", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-jest": "22.0.3", + "babel-plugin-istanbul": "4.1.5", + "chalk": "2.3.0", + "convert-source-map": "1.5.0", + "graceful-fs": "4.1.11", + "jest-config": "22.0.3", + "jest-haste-map": "22.0.3", + "jest-regex-util": "22.0.3", + "jest-resolve": "22.0.3", + "jest-util": "22.0.3", + "json-stable-stringify": "1.0.1", + "micromatch": "2.3.11", + "realpath-native": "1.0.0", + "slash": "1.0.0", + "strip-bom": "3.0.0", + "write-file-atomic": "2.3.0", + "yargs": "10.0.3" + } + }, + "jest-snapshot": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.0.3.tgz", + "integrity": "sha512-e/a/EvMsY5XROWy4QWX6PvYziuJ8ttD6+QcnbogODWtx2LGhvVQOb7pmqGTo0tL/p0vzFetZA9GlZSh/EfMepg==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "jest-diff": "22.0.3", + "jest-matcher-utils": "22.0.3", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "pretty-format": "22.0.3" + } + }, + "jest-util": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.0.3.tgz", + "integrity": "sha512-iDnKIw4P+9433L7II90UGYZ4rQOatbbcjZO/+1+Fga+rNUF1wEijDfTDjGQil98smAquvB02RBrDgfbquUHLmg==", + "dev": true, + "requires": { + "callsites": "2.0.0", + "chalk": "2.3.0", + "graceful-fs": "4.1.11", + "is-ci": "1.0.10", + "jest-message-util": "22.0.3", + "jest-validate": "22.0.3", + "mkdirp": "0.5.1" + } + }, + "jest-validate": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.0.3.tgz", + "integrity": "sha512-GmlLmPCtrSQ3iB4A1uxcfjawaaQnwESCDcUg5tMxJKeBbmPdcWPAb6EWzvANxULPUV7hfPKLwg4xIPpi7cx1/g==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "jest-get-type": "22.0.3", + "leven": "2.1.0", + "pretty-format": "22.0.3" + } + }, + "jsdom": { + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.5.1.tgz", + "integrity": "sha512-89ztIZ03aYK9f1uUrLXLsZndRge/JnZjzjpaN+lrse3coqz+8PR/dX4WLHpbF5fIKTXhDjFODOJw2328lPJ90g==", + "dev": true, + "requires": { + "abab": "1.0.4", + "acorn": "5.2.1", + "acorn-globals": "4.1.0", + "array-equal": "1.0.0", + "browser-process-hrtime": "0.1.2", + "content-type-parser": "1.0.2", + "cssom": "0.3.2", + "cssstyle": "0.2.37", + "domexception": "1.0.0", + "escodegen": "1.9.0", + "html-encoding-sniffer": "1.0.2", + "left-pad": "1.2.0", + "nwmatcher": "1.4.3", + "parse5": "3.0.3", + "pn": "1.0.0", + "request": "2.83.0", + "request-promise-native": "1.0.5", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.3.3", + "webidl-conversions": "4.0.2", + "whatwg-encoding": "1.0.3", + "whatwg-url": "6.4.0", + "xml-name-validator": "2.0.1" + } + }, + "left-pad": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.2.0.tgz", + "integrity": "sha1-0wpzxrggHY99jnlWupYWCHpo4O4=", + "dev": true + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "8.5.2" + } + }, + "pretty-format": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.0.3.tgz", + "integrity": "sha512-qXbDFJ2/Kk3HFIaLdOblbsCKQ09kZu4MKbXB+m/EaqD7PZ/wXe2XcRREmQleMh4wmerxlma6eJTh3nxCXYUmmA==", + "dev": true, + "requires": { + "ansi-regex": "3.0.0", + "ansi-styles": "3.2.0" + } + }, + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.0.tgz", + "integrity": "sha512-vUoN3I7fHQe0R/SJLKRdKYuEdRGogsviXFkHHo17AWaTGv17VLnxw+CFXvqy+y4ORZ3doWLQcxRYfwKrsd/H7Q==", + "dev": true, + "requires": { + "source-map": "0.6.1" + } + }, "supports-color": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", @@ -8181,19 +8175,95 @@ "requires": { "has-flag": "2.0.0" } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "2.1.0" + } + }, + "whatwg-url": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz", + "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==", + "dev": true, + "requires": { + "lodash.sortby": "4.7.0", + "tr46": "1.0.1", + "webidl-conversions": "4.0.2" + } + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" + } + }, + "yargs": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz", + "integrity": "sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==", + "dev": true, + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "8.1.0" + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } } } }, - "jest-validate": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-21.2.1.tgz", - "integrity": "sha512-k4HLI1rZQjlU+EC682RlQ6oZvLrE5SCh3brseQc24vbZTxzT/k/3urar5QMCVgjadmSO7lECeGdc6YxnM3yEGg==", + "jest-docblock": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", + "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==" + }, + "jest-haste-map": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-21.2.0.tgz", + "integrity": "sha512-5LhsY/loPH7wwOFRMs+PT4aIAORJ2qwgbpMFlbWbxfN0bk3ZCwxJ530vrbSiTstMkYLao6JwBkLhCJ5XbY7ZHw==", + "requires": { + "fb-watchman": "2.0.0", + "graceful-fs": "4.1.11", + "jest-docblock": "21.2.0", + "micromatch": "2.3.11", + "sane": "2.2.0", + "worker-farm": "1.5.1" + } + }, + "jest-leak-detector": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-22.0.3.tgz", + "integrity": "sha512-xyVdAmcG8M3jWtVeadDUU6MAHLBrjkP4clz2UtTZ1gpe5bRLk27VjQOpzTwK20MkV/6iZQhSuRVuzHS5kD0HpA==", "dev": true, "requires": { - "chalk": "2.3.0", - "jest-get-type": "21.2.0", - "leven": "2.1.0", - "pretty-format": "21.2.1" + "pretty-format": "22.0.3", + "weak": "1.0.1" }, "dependencies": { "ansi-regex": { @@ -8211,38 +8281,27 @@ "color-convert": "1.9.1" } }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, "pretty-format": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-21.2.1.tgz", - "integrity": "sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==", + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.0.3.tgz", + "integrity": "sha512-qXbDFJ2/Kk3HFIaLdOblbsCKQ09kZu4MKbXB+m/EaqD7PZ/wXe2XcRREmQleMh4wmerxlma6eJTh3nxCXYUmmA==", "dev": true, "requires": { "ansi-regex": "3.0.0", "ansi-styles": "3.2.0" } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } } } }, + "jest-worker": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-22.0.3.tgz", + "integrity": "sha512-fPdCTnogFQiR0CP6whEsIly2RfcHxvalqyLjhui6qa1SnOmHiX7L8k4Umo8CBIp5ndWY0+ej1o7OTE5MlzPabg==", + "dev": true, + "requires": { + "merge-stream": "1.0.1" + } + }, "js-base64": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", @@ -8278,47 +8337,6 @@ "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.6.0.tgz", "integrity": "sha512-xYuhvQ7I9PDJIGBWev9xm0+SMSed3ZDBAmvVjbFR1ZRLAF+vlXcQu6cRI9uAlj81rzikElRVteehwV7DuX2ZmQ==" }, - "jsdom": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", - "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", - "dev": true, - "requires": { - "abab": "1.0.4", - "acorn": "4.0.13", - "acorn-globals": "3.1.0", - "array-equal": "1.0.0", - "content-type-parser": "1.0.2", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "escodegen": "1.9.0", - "html-encoding-sniffer": "1.0.2", - "nwmatcher": "1.4.3", - "parse5": "1.5.1", - "request": "2.83.0", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.3", - "webidl-conversions": "4.0.2", - "whatwg-encoding": "1.0.3", - "whatwg-url": "4.8.0", - "xml-name-validator": "2.0.1" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - } - } - }, "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", @@ -8393,12 +8411,6 @@ "verror": "1.10.0" } }, - "jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", - "dev": true - }, "keycode": { "version": "2.1.9", "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz", @@ -9490,16 +9502,6 @@ "tmpl": "1.0.4" } }, - "mantra-core": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mantra-core/-/mantra-core-1.7.0.tgz", - "integrity": "sha1-qMg+jO6D72pzgxMVGf6AMa1UY4Y=", - "requires": { - "babel-runtime": "6.26.0", - "react-komposer": "1.13.1", - "react-simple-di": "1.2.0" - } - }, "math-expression-evaluator": { "version": "1.2.17", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", @@ -9846,9 +9848,9 @@ "integrity": "sha1-zz2C0YwMp/RY2PKiQIF7PcflSgE=" }, "moment": { - "version": "2.19.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.4.tgz", - "integrity": "sha512-1xFTAknSLfc47DIxHDUbnJWC+UwgWxATmymaxIPQpmMh7LBm7ZbwVEsuushqwL2GYZU0jie4xO+TK44hJPjNSQ==" + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", + "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" }, "morgan": { "version": "1.6.1", @@ -10394,6 +10396,16 @@ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", "dev": true }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.9.0" + } + }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", @@ -10536,12 +10548,6 @@ "minimist": "1.2.0" } }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -10607,12 +10613,6 @@ "error-ex": "1.3.1" } }, - "parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", - "dev": true - }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -10747,6 +10747,12 @@ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "dev": true }, + "pn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.0.0.tgz", + "integrity": "sha1-HPWjCw2AbNGPiPxBprXUrWFbO6k=", + "dev": true + }, "podda": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/podda/-/podda-1.2.2.tgz", @@ -11141,17 +11147,6 @@ "object-assign": "4.1.1" } }, - "postcss-loader": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.0.8.tgz", - "integrity": "sha512-KtXBiQ/r/WYW8LxTSJK7h8wLqvCMSub/BqmRnud/Mu8RzwflW9cmXxwsMwbn15TNv287Hcufdb3ZSs7xHKnG8Q==", - "requires": { - "loader-utils": "1.1.0", - "postcss": "6.0.14", - "postcss-load-config": "1.2.0", - "schema-utils": "0.3.0" - } - }, "postcss-merge-idents": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", @@ -12141,15 +12136,6 @@ "react-icon-base": "2.1.0" } }, - "react-inspector": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-2.2.1.tgz", - "integrity": "sha512-aXrxJTfriJtZtv/+A9cFIOpfbt711yCD1Ht3fSn3JyuDaAt1+eLtb01R5d/8gGpyquOVWn/d+eM1VPqFXS7UZA==", - "requires": { - "babel-runtime": "6.26.0", - "is-dom": "1.0.9" - } - }, "react-komposer": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/react-komposer/-/react-komposer-1.13.1.tgz", @@ -12171,19 +12157,10 @@ "smart-mixin": "2.0.0" } }, - "react-modal": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.1.2.tgz", - "integrity": "sha512-a3L2qP0kaqMBy4C1aojs2caUIz3kHRFlnuWJ8zsnuUmh/fKHEDASujVBiQcatn+yUosdE9hViB6JvLfkB0tN2A==", - "requires": { - "exenv": "1.2.2", - "prop-types": "15.6.0" - } - }, "react-native": { - "version": "0.50.4", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.50.4.tgz", - "integrity": "sha1-GU9dpJOQh7Os7nEqUDR19JQtyn4=", + "version": "0.51.0", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.51.0.tgz", + "integrity": "sha512-XpLmz3C7DOds5TUwIOpQBEXqoFDtU2/HmMBzVItGlHtowXpcHoQxJYSxL4Z9u8B4EeDfSvGfU2TFHq0sV3xd3Q==", "requires": { "absolute-path": "0.0.0", "art": "0.10.1", @@ -12191,6 +12168,7 @@ "babel-plugin-syntax-trailing-function-commas": "6.22.0", "babel-plugin-transform-async-to-generator": "6.16.0", "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", "babel-plugin-transform-flow-strip-types": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-register": "6.26.0", @@ -12227,7 +12205,7 @@ "react-clone-referenced-element": "1.0.1", "react-devtools-core": "2.5.2", "react-timer-mixin": "0.13.3", - "regenerator-runtime": "0.9.6", + "regenerator-runtime": "0.11.1", "rimraf": "2.6.2", "semver": "5.4.1", "shell-quote": "1.6.1", @@ -12239,11 +12217,6 @@ "yargs": "9.0.1" }, "dependencies": { - "regenerator-runtime": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz", - "integrity": "sha1-0z65XQ0gAaS+OWWXB8UbDLcc4Ck=" - }, "whatwg-fetch": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz", @@ -12569,35 +12542,6 @@ } } }, - "react-simple-di": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/react-simple-di/-/react-simple-di-1.2.0.tgz", - "integrity": "sha1-3eDlv2ifOR7yqwLJBDshP+I5xtA=", - "requires": { - "babel-runtime": "6.26.0", - "hoist-non-react-statics": "1.2.0" - } - }, - "react-split-pane": { - "version": "0.1.70", - "resolved": "https://registry.npmjs.org/react-split-pane/-/react-split-pane-0.1.70.tgz", - "integrity": "sha512-vXLE4gTI9gTFXEaX2pKKyZilwDsxGVmAQi7yombplzzj2oBY/fmd3o4DlNSMN43m9XchtStcWri9mOrBx3yMiQ==", - "requires": { - "@types/inline-style-prefixer": "3.0.1", - "@types/react": "16.0.22", - "inline-style-prefixer": "3.0.8", - "prop-types": "15.6.0", - "react-style-proptype": "3.1.0" - } - }, - "react-stubber": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/react-stubber/-/react-stubber-1.0.0.tgz", - "integrity": "sha1-Qe4srHLU1P1wpjiW2pjhNzm4Rig=", - "requires": { - "babel-runtime": "6.26.0" - } - }, "react-style-proptype": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/react-style-proptype/-/react-style-proptype-3.1.0.tgz", @@ -12810,6 +12754,15 @@ } } }, + "realpath-native": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.0.tgz", + "integrity": "sha512-XJtlRJ9jf0E1H1SLeJyQ9PGzQD7S65h1pRXEcAeK48doKOnKxcgPeNohJvD5u/2sI9J1oke6E8bZHS/fmW1UiQ==", + "dev": true, + "requires": { + "util.promisify": "1.0.0" + } + }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -12903,9 +12856,9 @@ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" }, "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, "regenerator-transform": { "version": "0.10.1", @@ -13069,6 +13022,26 @@ } } }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "1.1.1", + "tough-cookie": "2.3.3" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -13577,9 +13550,9 @@ } }, "snyk": { - "version": "1.52.1", - "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.52.1.tgz", - "integrity": "sha1-lSvdnS2rLMA6RR/ZhtkUUcxv7ZE=", + "version": "1.61.2", + "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.61.2.tgz", + "integrity": "sha1-wUJvhLaGFJmcauxwrG8I2BVaCZs=", "requires": { "abbrev": "1.1.1", "ansi-escapes": "1.4.0", @@ -13595,13 +13568,13 @@ "proxy-from-env": "1.0.0", "semver": "5.4.1", "snyk-config": "1.0.1", - "snyk-go-plugin": "1.3.8", + "snyk-go-plugin": "1.4.3", "snyk-gradle-plugin": "1.2.0", "snyk-module": "1.8.1", "snyk-mvn-plugin": "1.1.0", - "snyk-nuget-plugin": "1.3.3", - "snyk-php-plugin": "1.1.2", - "snyk-policy": "1.7.1", + "snyk-nuget-plugin": "1.3.6", + "snyk-php-plugin": "1.3.0", + "snyk-policy": "1.10.1", "snyk-python-plugin": "1.4.0", "snyk-recursive-readdir": "2.0.0", "snyk-resolve": "1.0.0", @@ -13695,6 +13668,76 @@ "onetime": "1.1.0" } }, + "snyk-go-plugin": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/snyk-go-plugin/-/snyk-go-plugin-1.4.3.tgz", + "integrity": "sha512-xU+X+4qNwpe+0dwkxBiMrKbTXBT5HSaUViqTZ/SlgtPDRZ9XclgJ/b9IPU4ujAZ69Pzv5hRDyRP0wFO7hw0kXg==", + "requires": { + "graphlib": "2.1.1", + "toml": "2.3.3" + } + }, + "snyk-nuget-plugin": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/snyk-nuget-plugin/-/snyk-nuget-plugin-1.3.6.tgz", + "integrity": "sha512-3y+n1MEzZVWFphpjsa8ETyjqfWLsnZbTeY4JirJhLX3YjT1PfSVIEdCfHjtu54VKbG/aIixrn5pUrxeo4VFnOQ==", + "requires": { + "debug": "3.1.0", + "es6-promise": "4.1.1", + "xml2js": "0.4.19", + "zip": "1.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "es6-promise": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", + "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==" + } + } + }, + "snyk-php-plugin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/snyk-php-plugin/-/snyk-php-plugin-1.3.0.tgz", + "integrity": "sha512-78QTlDta81rWVhbpeW36ykfvghIF9W6oEO51S5my5N6CEvmC1Fh55tWdB5fs8zCsFxC1IhocEnSQgbD3eD/Slw==", + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "snyk-policy": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/snyk-policy/-/snyk-policy-1.10.1.tgz", + "integrity": "sha1-saJsiu9SnGFgSso4IRHlNdURt2M=", + "requires": { + "debug": "2.6.9", + "email-validator": "1.1.1", + "es6-promise": "3.3.1", + "js-yaml": "3.7.0", + "lodash.clonedeep": "4.5.0", + "semver": "5.4.1", + "snyk-module": "1.8.1", + "snyk-resolve": "1.0.0", + "snyk-try-require": "1.2.0", + "then-fs": "2.0.0" + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -13725,15 +13768,6 @@ "path-is-absolute": "1.0.1" } }, - "snyk-go-plugin": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/snyk-go-plugin/-/snyk-go-plugin-1.3.8.tgz", - "integrity": "sha512-jHdC6+wEgSCV287PWFPx/9yb7NaLIi/jf4qxxu4CfNVjepA7Nk88LWAb4URQ/kJbw2IY7lz9z6OJlr/npqt9MA==", - "requires": { - "graphlib": "2.1.1", - "toml": "2.3.3" - } - }, "snyk-gradle-plugin": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/snyk-gradle-plugin/-/snyk-gradle-plugin-1.2.0.tgz", @@ -13756,66 +13790,6 @@ "resolved": "https://registry.npmjs.org/snyk-mvn-plugin/-/snyk-mvn-plugin-1.1.0.tgz", "integrity": "sha512-eWRTGzSNnuhLF49015ZyRgYsNC7N0uXltNZVvaLrKClL9tERG7uX9IAWMwKyMeyLS9Dlpml4zLZ5nYY/Z+aU1Q==" }, - "snyk-nuget-plugin": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/snyk-nuget-plugin/-/snyk-nuget-plugin-1.3.3.tgz", - "integrity": "sha512-TekZeStK5VNWcCDiaTOJKrlA2BR8kueuduRpmUIDF7dORsDTbDFKDT+OfFdKfm+oqCmM7eCxLk2IqWnVzAbzwQ==", - "requires": { - "debug": "3.1.0", - "es6-promise": "4.1.1", - "xml2js": "0.4.19", - "zip": "1.2.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "es6-promise": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", - "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==" - } - } - }, - "snyk-php-plugin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/snyk-php-plugin/-/snyk-php-plugin-1.1.2.tgz", - "integrity": "sha512-6eINTroSUeSFU8W/HRGyDZEykunqrQI0kMPQxJzq6HyNxlRSAlFBI2RQVbGV+GwuaeKXHeGTeWjaLE6s2tVkdw==", - "requires": { - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "snyk-policy": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/snyk-policy/-/snyk-policy-1.7.1.tgz", - "integrity": "sha1-5BO2vUr2BQxeX0RSh5CeTpigmyI=", - "requires": { - "debug": "2.6.9", - "es6-promise": "3.3.1", - "js-yaml": "3.7.0", - "lodash.clonedeep": "4.5.0", - "semver": "5.4.1", - "snyk-module": "1.8.1", - "snyk-resolve": "1.0.0", - "snyk-try-require": "1.2.0", - "then-fs": "2.0.0" - } - }, "snyk-python-plugin": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/snyk-python-plugin/-/snyk-python-plugin-1.4.0.tgz", @@ -14000,6 +13974,12 @@ "tweetnacl": "0.14.5" } }, + "stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", + "dev": true + }, "stacktrace-parser": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz", @@ -14010,6 +13990,12 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, "stream-browserify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", @@ -14179,15 +14165,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, - "style-loader": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz", - "integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==", - "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" - } - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -14675,12 +14652,6 @@ "punycode": "1.4.1" } }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, "trackr": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/trackr/-/trackr-2.0.2.tgz", @@ -15060,6 +15031,16 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "object.getownpropertydescriptors": "2.0.3" + } + }, "utils-merge": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", @@ -15185,111 +15166,23 @@ "graceful-fs": "4.1.11" } }, + "weak": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/weak/-/weak-1.0.1.tgz", + "integrity": "sha1-q5mqswcGlZqgIAy4z1RbucszuZ4=", + "dev": true, + "optional": true, + "requires": { + "bindings": "1.3.0", + "nan": "2.7.0" + } + }, "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", "dev": true }, - "webpack": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz", - "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==", - "requires": { - "acorn": "5.2.1", - "acorn-dynamic-import": "2.0.2", - "ajv": "5.3.0", - "ajv-keywords": "2.1.1", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.0.4", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.0.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", - "webpack-sources": "1.0.2", - "yargs": "8.0.2" - }, - "dependencies": { - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "requires": { - "has-flag": "2.0.0" - } - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", - "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=", - "requires": { - "memory-fs": "0.4.1", - "mime": "1.4.1", - "path-is-absolute": "1.0.1", - "range-parser": "1.0.3", - "time-stamp": "2.0.0" - }, - "dependencies": { - "time-stamp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", - "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=" - } - } - }, - "webpack-hot-middleware": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.20.0.tgz", - "integrity": "sha512-AYwVG9DCvMoXbwx8eK16CbJY3Ltwap44lW3T7hFsE0U3zRwtViHMw1DFpY5hMwXNqKsUk3HtNcf3PoV+gIxJeg==", - "requires": { - "ansi-html": "0.0.7", - "html-entities": "1.2.1", - "querystring": "0.2.0", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, "webpack-sources": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.2.tgz", @@ -15320,24 +15213,6 @@ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" }, - "whatwg-url": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", - "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", - "dev": true, - "requires": { - "tr46": "0.0.3", - "webidl-conversions": "3.0.1" - }, - "dependencies": { - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - } - } - }, "whet.extend": { "version": "0.9.9", "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", diff --git a/package.json b/package.json index e4b9eb2db..8b21d0d9b 100644 --- a/package.json +++ b/package.json @@ -21,16 +21,17 @@ ] }, "dependencies": { - "@storybook/react-native": "^3.2.15", + "@storybook/addons": "^3.2.18", + "@storybook/react-native": "^3.2.18", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-remove-console": "^6.8.5", "babel-polyfill": "^6.26.0", "ejson": "^2.1.2", - "moment": "^2.19.3", + "moment": "^2.20.1", "prop-types": "^15.6.0", "react": "^16.2.0", "react-emojione": "^5.0.0", - "react-native": "^0.50.4", + "react-native": "^0.51.0", "react-native-action-button": "^2.8.3", "react-native-actionsheet": "^2.3.0", "react-native-animatable": "^1.2.4", @@ -59,16 +60,16 @@ "redux-immutable-state-invariant": "^2.1.0", "redux-logger": "^3.0.6", "redux-saga": "^0.16.0", - "regenerator-runtime": "^0.11.0", + "regenerator-runtime": "^0.11.1", "remote-redux-devtools": "^0.5.12", "simple-markdown": "^0.3.1", - "snyk": "^1.41.1", + "snyk": "^1.61.1", "strip-ansi": "^4.0.0" }, "devDependencies": { - "@storybook/addon-storyshots": "^3.2.15", + "@storybook/addon-storyshots": "^3.2.18", "babel-eslint": "^8.0.2", - "babel-jest": "21.2.0", + "babel-jest": "^22.0.3", "babel-plugin-transform-react-remove-prop-types": "^0.4.10", "babel-preset-es2015": "^6.24.1", "babel-preset-react-native": "4.0.0", @@ -76,12 +77,12 @@ "eslint": "^4.12.0", "eslint-config-airbnb": "^16.1.0", "eslint-plugin-import": "^2.8.0", - "eslint-plugin-jsx-a11y": "^6.0.2", + "eslint-plugin-jsx-a11y": "^6.0.3", "eslint-plugin-react": "^7.5.1", "eslint-plugin-react-native": "^3.2.0", "identity-obj-proxy": "^3.0.0", - "jest": "21.2.1", - "jest-cli": "^21.2.1", + "jest": "^22.0.3", + "jest-cli": "^22.0.3", "react-dom": "^16.2.0", "react-test-renderer": "^16.2.0" },