diff --git a/browser/.editorconfig b/browser/.editorconfig index 92926b6de..3674a17f4 100644 --- a/browser/.editorconfig +++ b/browser/.editorconfig @@ -3,7 +3,7 @@ root = true [*] indent_style = space -indent_size = 4 +indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true diff --git a/browser/.prettierrc b/browser/.prettierrc new file mode 100644 index 000000000..cce9d3c08 --- /dev/null +++ b/browser/.prettierrc @@ -0,0 +1,3 @@ +{ + "semi": false +} diff --git a/browser/app/css/loader.css b/browser/app/css/loader.css index d7ae07b02..2cf1dded9 100644 --- a/browser/app/css/loader.css +++ b/browser/app/css/loader.css @@ -54,7 +54,7 @@ .pl-inner > img { width: 30px; - margin-top: 28px; + margin-top: 21px; } @-webkit-keyframes fade-in { diff --git a/browser/app/img/favicon.ico b/browser/app/img/favicon.ico index 0718efa83..4995bd032 100644 Binary files a/browser/app/img/favicon.ico and b/browser/app/img/favicon.ico differ diff --git a/browser/app/img/logo.svg b/browser/app/img/logo.svg index e4fa2b767..46024fee3 100644 --- a/browser/app/img/logo.svg +++ b/browser/app/img/logo.svg @@ -1,57 +1,16 @@ - - - - - - - image/svg+xml - - - - - - - - - - Minio Logo - - - + + + + Untitled 2 + Created with Sketch. + + + + + + + + - - - + \ No newline at end of file diff --git a/browser/app/index.js b/browser/app/index.js index 65293294f..85afb30b1 100644 --- a/browser/app/index.js +++ b/browser/app/index.js @@ -1,5 +1,5 @@ /* - * Minio Cloud Storage (C) 2016 Minio, Inc. + * Minio Cloud Storage (C) 2016, 2018 Minio, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,106 +13,31 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import 'babel-polyfill' -import './less/main.less' +import "babel-polyfill" +import "./less/main.less" +import "font-awesome/css/font-awesome.css" +import "material-design-iconic-font/dist/css/material-design-iconic-font.min.css" -import React from 'react' -import ReactDOM from 'react-dom' -import thunkMiddleware from 'redux-thunk' -import createStore from 'redux/lib/createStore' -import applyMiddleware from 'redux/lib/applyMiddleware' +import React from "react" +import ReactDOM from "react-dom" +import { BrowserRouter, Route } from "react-router-dom" +import { Provider } from "react-redux" -import Route from 'react-router/lib/Route' -import Router from 'react-router/lib/Router' -import browserHistory from 'react-router/lib/browserHistory' -import IndexRoute from 'react-router/lib/IndexRoute' +import { minioBrowserPrefix } from "./js/constants" +import configureStore from "./js/store/configure-store" +import hideLoader from "./js/loader" +import App from "./js/components/App" -import Provider from 'react-redux/lib/components/Provider' -import connect from 'react-redux/lib/components/connect' +const store = configureStore() -import Moment from 'moment' +ReactDOM.render( + + + + + , + document.getElementById("root") +) -import { minioBrowserPrefix } from './js/constants.js' -import * as actions from './js/actions.js' -import reducer from './js/reducers.js' - -import _Login from './js/components/Login.js' -import _Browse from './js/components/Browse.js' -import fontAwesome from 'font-awesome/css/font-awesome.css' - -import MaterialDesignIconicFonts from 'material-design-iconic-font/dist/css/material-design-iconic-font.min.css' - -import Web from './js/web' -window.Web = Web - -import storage from 'local-storage-fallback' -const store = applyMiddleware(thunkMiddleware)(createStore)(reducer) -const Browse = connect(state => state)(_Browse) -const Login = connect(state => state)(_Login) - -let web = new Web(`${window.location.protocol}//${window.location.host}${minioBrowserPrefix}/webrpc`, store.dispatch) - -window.web = web - -store.dispatch(actions.setWeb(web)) - -function authNeeded(nextState, replace, cb) { - if (web.LoggedIn()) { - return cb() - } - if (location.pathname === minioBrowserPrefix || location.pathname === minioBrowserPrefix + '/') { - replace(`${minioBrowserPrefix}/login`) - } - return cb() -} - -function authNotNeeded(nextState, replace) { - if (web.LoggedIn()) { - replace(`${minioBrowserPrefix}`) - } -} - -const App = (props) => { - return
- { props.children } -
-} - -ReactDOM.render(( - - - - - - - - - - - - - ), document.getElementById('root')) - -//Page loader -let delay = [0, 400] -let i = 0 - -function handleLoader() { - if (i < 2) { - setTimeout(function() { - document.querySelector('.page-load').classList.add('pl-' + i) - i++ - handleLoader() - }, delay[i]) - } -} -handleLoader() - -if (storage.getItem('newlyUpdated')) { - store.dispatch(actions.showAlert({ - type: 'success', - message: "Updated to the latest UI Version." - })) - storage.removeItem('newlyUpdated') -} +hideLoader() diff --git a/browser/app/js/__tests__/jsonrpc-test.js b/browser/app/js/__tests__/jsonrpc-test.js index 7e5b52f76..30d15b7de 100644 --- a/browser/app/js/__tests__/jsonrpc-test.js +++ b/browser/app/js/__tests__/jsonrpc-test.js @@ -14,30 +14,28 @@ * limitations under the License. */ -import expect from 'expect'; -import JSONrpc from '../jsonrpc'; +import JSONrpc from "../jsonrpc" -describe('jsonrpc', () => { - it('should fail with invalid endpoint', (done) => { +describe("jsonrpc", () => { + it("should fail with invalid endpoint", done => { try { let jsonRPC = new JSONrpc({ - endpoint: 'htt://localhost:9000', - namespace: 'Test' - }); + endpoint: "htt://localhost:9000", + namespace: "Test" + }) } catch (e) { - done(); + done() } - }); - it('should succeed with valid endpoint', () => { + }) + it("should succeed with valid endpoint", () => { let jsonRPC = new JSONrpc({ - endpoint: 'http://localhost:9000/webrpc', - namespace: 'Test' - }); - expect(jsonRPC.version).toEqual('2.0'); - expect(jsonRPC.host).toEqual('localhost'); - expect(jsonRPC.port).toEqual('9000'); - expect(jsonRPC.path).toEqual('/webrpc'); - expect(jsonRPC.scheme).toEqual('http'); - }); -}); - + endpoint: "http://localhost:9000/webrpc", + namespace: "Test" + }) + expect(jsonRPC.version).toEqual("2.0") + expect(jsonRPC.host).toEqual("localhost") + expect(jsonRPC.port).toEqual("9000") + expect(jsonRPC.path).toEqual("/webrpc") + expect(jsonRPC.scheme).toEqual("http") + }) +}) diff --git a/browser/app/js/actions.js b/browser/app/js/actions.js deleted file mode 100644 index bc8057cc2..000000000 --- a/browser/app/js/actions.js +++ /dev/null @@ -1,695 +0,0 @@ -/* - * Minio Cloud Storage (C) 2016 Minio, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Moment from 'moment' -import browserHistory from 'react-router/lib/browserHistory' -import storage from 'local-storage-fallback' -import { minioBrowserPrefix } from './constants' - -export const SET_WEB = 'SET_WEB' -export const SET_CURRENT_BUCKET = 'SET_CURRENT_BUCKET' -export const SET_CURRENT_PATH = 'SET_CURRENT_PATH' -export const SET_BUCKETS = 'SET_BUCKETS' -export const ADD_BUCKET = 'ADD_BUCKET' -export const REMOVE_BUCKET = 'REMOVE_BUCKET' -export const SHOW_BUCKET_DROPDOWN = 'SHOW_BUCKET_DROPDOWN' -export const SET_VISIBLE_BUCKETS = 'SET_VISIBLE_BUCKETS' -export const SET_OBJECTS = 'SET_OBJECTS' -export const APPEND_OBJECTS = 'APPEND_OBJECTS' -export const RESET_OBJECTS = 'RESET_OBJECTS' -export const SET_STORAGE_INFO = 'SET_STORAGE_INFO' -export const SET_SERVER_INFO = 'SET_SERVER_INFO' -export const SHOW_MAKEBUCKET_MODAL = 'SHOW_MAKEBUCKET_MODAL' -export const ADD_UPLOAD = 'ADD_UPLOAD' -export const STOP_UPLOAD = 'STOP_UPLOAD' -export const UPLOAD_PROGRESS = 'UPLOAD_PROGRESS' -export const SET_ALERT = 'SET_ALERT' -export const SET_LOGIN_ERROR = 'SET_LOGIN_ERROR' -export const SET_SHOW_ABORT_MODAL = 'SET_SHOW_ABORT_MODAL' -export const SHOW_ABOUT = 'SHOW_ABOUT' -export const SET_SORT_NAME_ORDER = 'SET_SORT_NAME_ORDER' -export const SET_SORT_SIZE_ORDER = 'SET_SORT_SIZE_ORDER' -export const SET_SORT_DATE_ORDER = 'SET_SORT_DATE_ORDER' -export const SET_LATEST_UI_VERSION = 'SET_LATEST_UI_VERSION' -export const SET_SIDEBAR_STATUS = 'SET_SIDEBAR_STATUS' -export const SET_LOGIN_REDIRECT_PATH = 'SET_LOGIN_REDIRECT_PATH' -export const SET_LOAD_BUCKET = 'SET_LOAD_BUCKET' -export const SET_LOAD_PATH = 'SET_LOAD_PATH' -export const SHOW_SETTINGS = 'SHOW_SETTINGS' -export const SET_SETTINGS = 'SET_SETTINGS' -export const SHOW_BUCKET_POLICY = 'SHOW_BUCKET_POLICY' -export const SET_POLICIES = 'SET_POLICIES' -export const SET_SHARE_OBJECT = 'SET_SHARE_OBJECT' -export const DELETE_CONFIRMATION = 'DELETE_CONFIRMATION' -export const SET_PREFIX_WRITABLE = 'SET_PREFIX_WRITABLE' -export const REMOVE_OBJECT = 'REMOVE_OBJECT' -export const CHECKED_OBJECTS_ADD = 'CHECKED_OBJECTS_ADD' -export const CHECKED_OBJECTS_REMOVE = 'CHECKED_OBJECTS_REMOVE' -export const CHECKED_OBJECTS_RESET = 'CHECKED_OBJECTS_RESET' - -export const showDeleteConfirmation = (object) => { - return { - type: DELETE_CONFIRMATION, - payload: { - object, - show: true - } - } -} - -export const hideDeleteConfirmation = () => { - return { - type: DELETE_CONFIRMATION, - payload: { - object: '', - show: false - } - } -} - -export const showShareObject = (object, url) => { - return { - type: SET_SHARE_OBJECT, - shareObject: { - object, - url, - show: true - } - } -} - -export const hideShareObject = () => { - return { - type: SET_SHARE_OBJECT, - shareObject: { - url: '', - show: false - } - } -} - -export const shareObject = (object, days, hours, minutes) => (dispatch, getState) => { - const {currentBucket, web} = getState() - let host = location.host - let bucket = currentBucket - - if (!web.LoggedIn()) { - dispatch(showShareObject(object, `${host}/${bucket}/${object}`)) - return - } - - let expiry = days * 24 * 60 * 60 + hours * 60 * 60 + minutes * 60 - web.PresignedGet({ - host, - bucket, - object, - expiry - }) - .then(obj => { - dispatch(showShareObject(object, obj.url)) - dispatch(showAlert({ - type: 'success', - message: `Object shared. Expires in ${days} days ${hours} hours ${minutes} minutes.` - })) - }) - .catch(err => { - dispatch(showAlert({ - type: 'danger', - message: err.message - })) - }) -} - -export const setLoginRedirectPath = (path) => { - return { - type: SET_LOGIN_REDIRECT_PATH, - path - } -} - -export const setLoadPath = (loadPath) => { - return { - type: SET_LOAD_PATH, - loadPath - } -} - -export const setLoadBucket = (loadBucket) => { - return { - type: SET_LOAD_BUCKET, - loadBucket - } -} - -export const setWeb = web => { - return { - type: SET_WEB, - web - } -} - -export const setBuckets = buckets => { - return { - type: SET_BUCKETS, - buckets - } -} - -export const addBucket = bucket => { - return { - type: ADD_BUCKET, - bucket - } -} - -export const removeBucket = bucket => { - return { - type: REMOVE_BUCKET, - bucket - } -} - -export const showBucketDropdown = bucket => { - return { - type: SHOW_BUCKET_DROPDOWN, - showBucketDropdown: true - } -} - -export const hideBucketDropdown = bucket => { - return { - type: SHOW_BUCKET_DROPDOWN, - showBucketDropdown: false - } -} - -export const showMakeBucketModal = () => { - return { - type: SHOW_MAKEBUCKET_MODAL, - showMakeBucketModal: true - } -} - -export const hideAlert = () => { - return { - type: SET_ALERT, - alert: { - show: false, - message: '', - type: '' - } - } -} - -export const showAlert = alert => { - return (dispatch, getState) => { - let alertTimeout = null - if (alert.type !== 'danger') { - alertTimeout = setTimeout(() => { - dispatch({ - type: SET_ALERT, - alert: { - show: false - } - }) - }, 5000) - } - dispatch({ - type: SET_ALERT, - alert: Object.assign({}, alert, { - show: true, - alertTimeout - }) - }) - } -} - -export const removeObject = object => { - return { - type: REMOVE_OBJECT, - object - } -} - -export const setSidebarStatus = (status) => { - return { - type: SET_SIDEBAR_STATUS, - sidebarStatus: status - } -} - -export const hideMakeBucketModal = () => { - return { - type: SHOW_MAKEBUCKET_MODAL, - showMakeBucketModal: false - } -} - -export const setVisibleBuckets = visibleBuckets => { - return { - type: SET_VISIBLE_BUCKETS, - visibleBuckets - } -} - -const appendObjects = (objects, marker, istruncated) => { - return { - type: APPEND_OBJECTS, - objects, - marker, - istruncated - } -} - -export const setObjects = (objects) => { - return { - type: SET_OBJECTS, - objects, - } -} - -export const resetObjects = () => { - return { - type: RESET_OBJECTS - } -} - -export const setCurrentBucket = currentBucket => { - return { - type: SET_CURRENT_BUCKET, - currentBucket - } -} - -export const setCurrentPath = currentPath => { - return { - type: SET_CURRENT_PATH, - currentPath - } -} - -export const setStorageInfo = storageInfo => { - return { - type: SET_STORAGE_INFO, - storageInfo - } -} - -export const setServerInfo = serverInfo => { - return { - type: SET_SERVER_INFO, - serverInfo - } -} - -const setPrefixWritable = prefixWritable => { - return { - type: SET_PREFIX_WRITABLE, - prefixWritable, - } -} - -export const selectBucket = (newCurrentBucket, prefix) => { - if (!prefix) - prefix = '' - return (dispatch, getState) => { - let web = getState().web - let currentBucket = getState().currentBucket - - if (currentBucket !== newCurrentBucket) dispatch(setLoadBucket(newCurrentBucket)) - - dispatch(setCurrentBucket(newCurrentBucket)) - dispatch(selectPrefix(prefix)) - return - } -} - -export const deleteBucket = (bucket) => { - return (dispatch, getState) => { - // DeleteBucket() RPC call will ONLY delete a bucket if it is empty of - // objects. This means a call can just be sent, as it is entirely reversable - // and won't do any permanent damage. - web.DeleteBucket({ - bucketName: bucket - }) - .then(() => { - dispatch(showAlert({ - type: 'info', - message: `Bucket '${bucket}' has been deleted.` - })) - dispatch(removeBucket(bucket)) - }) - .catch(err => { - let message = err.message - dispatch(showAlert({ - type: 'danger', - message: message - })) - }) - } -} - -export const listObjects = () => { - return (dispatch, getState) => { - const {buckets, currentBucket, currentPath, marker, objects, istruncated, web} = getState() - if (!istruncated || buckets.length === 0) return - web.ListObjects({ - bucketName: currentBucket, - prefix: currentPath, - marker: marker - }) - .then(res => { - let objects = res.objects - if (!objects) - objects = [] - objects = objects.map(object => { - object.name = object.name.replace(`${currentPath}`, ''); - return object - }) - dispatch(appendObjects(objects, res.nextmarker, res.istruncated)) - dispatch(setPrefixWritable(res.writable)) - dispatch(setLoadBucket('')) - dispatch(setLoadPath('')) - }) - .catch(err => { - dispatch(showAlert({ - type: 'danger', - message: err.message - })) - dispatch(setLoadBucket('')) - dispatch(setLoadPath('')) - // Use browserHistory.replace instead of push so that browser back button works fine. - browserHistory.replace(`${minioBrowserPrefix}/login`) - }) - } -} - -export const selectPrefix = prefix => { - return (dispatch, getState) => { - const {currentBucket, web} = getState() - dispatch(setLoadPath(prefix)) - web.ListObjects({ - bucketName: currentBucket, - prefix, - marker: "" - }) - .then(res => { - let objects = res.objects - if (!objects) - objects = [] - objects = objects.map(object => { - object.name = object.name.replace(`${prefix}`, ''); - return object - }) - dispatch(resetObjects()) - dispatch(appendObjects( - objects, - res.nextmarker, - res.istruncated - )) - dispatch(setPrefixWritable(res.writable)) - dispatch(setSortNameOrder(false)) - dispatch(setCurrentPath(prefix)) - dispatch(setLoadBucket('')) - dispatch(setLoadPath('')) - }) - .catch(err => { - dispatch(showAlert({ - type: 'danger', - message: err.message - })) - dispatch(setLoadBucket('')) - dispatch(setLoadPath('')) - // Use browserHistory.replace instead of push so that browser back button works fine. - browserHistory.replace(`${minioBrowserPrefix}/login`) - }) - } -} - -export const addUpload = options => { - return { - type: ADD_UPLOAD, - slug: options.slug, - size: options.size, - xhr: options.xhr, - name: options.name - } -} - -export const stopUpload = options => { - return { - type: STOP_UPLOAD, - slug: options.slug - } -} - -export const uploadProgress = options => { - return { - type: UPLOAD_PROGRESS, - slug: options.slug, - loaded: options.loaded - } -} - -export const setShowAbortModal = showAbortModal => { - return { - type: SET_SHOW_ABORT_MODAL, - showAbortModal - } -} - -export const setLoginError = () => { - return { - type: SET_LOGIN_ERROR, - loginError: true - } -} - -export const downloadSelected = (url, req, xhr) => { - return (dispatch) => { - var anchor = document.createElement('a') - document.body.appendChild(anchor); - xhr.open('POST', url, true) - xhr.responseType = 'blob' - - xhr.onload = function(e) { - if (this.status == 200) { - dispatch(checkedObjectsReset()) - var blob = new Blob([this.response], { - type: 'octet/stream' - }) - var blobUrl = window.URL.createObjectURL(blob); - var separator = req.prefix.length > 1 ? '-' : '' - - anchor.href = blobUrl - anchor.download = req.bucketName+separator+req.prefix.slice(0, -1)+'.zip'; - - - - - anchor.click() - window.URL.revokeObjectURL(blobUrl) - anchor.remove() - } - }; - xhr.send(JSON.stringify(req)); - } -} - -export const uploadFile = (file, xhr) => { - return (dispatch, getState) => { - const {currentBucket, currentPath} = getState() - const objectName = `${currentPath}${file.name}` - const uploadUrl = `${window.location.origin}${minioBrowserPrefix}/upload/${currentBucket}/${objectName}` - // The slug is a unique identifer for the file upload. - const slug = `${currentBucket}-${currentPath}-${file.name}` - - xhr.open('PUT', uploadUrl, true) - xhr.withCredentials = false - const token = storage.getItem('token') - if (token) xhr.setRequestHeader("Authorization", 'Bearer ' + storage.getItem('token')) - xhr.setRequestHeader('x-amz-date', Moment().utc().format('YYYYMMDDTHHmmss') + 'Z') - dispatch(addUpload({ - slug, - xhr, - size: file.size, - name: file.name - })) - - xhr.onload = function(event) { - if (xhr.status == 401 || xhr.status == 403) { - setShowAbortModal(false) - dispatch(stopUpload({ - slug - })) - dispatch(showAlert({ - type: 'danger', - message: 'Unauthorized request.' - })) - } - if (xhr.status == 500) { - setShowAbortModal(false) - dispatch(stopUpload({ - slug - })) - dispatch(showAlert({ - type: 'danger', - message: xhr.responseText - })) - } - if (xhr.status == 200) { - setShowAbortModal(false) - dispatch(stopUpload({ - slug - })) - dispatch(showAlert({ - type: 'success', - message: 'File \'' + file.name + '\' uploaded successfully.' - })) - dispatch(selectPrefix(currentPath)) - } - } - - xhr.upload.addEventListener('error', event => { - dispatch(showAlert({ - type: 'danger', - message: 'Error occurred uploading \'' + file.name + '\'.' - })) - dispatch(stopUpload({ - slug - })) - }) - - xhr.upload.addEventListener('progress', event => { - if (event.lengthComputable) { - let loaded = event.loaded - let total = event.total - - // Update the counter. - dispatch(uploadProgress({ - slug, - loaded - })) - } - }) - xhr.send(file) - } -} - -export const showAbout = () => { - return { - type: SHOW_ABOUT, - showAbout: true - } -} - -export const hideAbout = () => { - return { - type: SHOW_ABOUT, - showAbout: false - } -} - -export const setSortNameOrder = (sortNameOrder) => { - return { - type: SET_SORT_NAME_ORDER, - sortNameOrder - } -} - -export const setSortSizeOrder = (sortSizeOrder) => { - return { - type: SET_SORT_SIZE_ORDER, - sortSizeOrder - } -} - -export const setSortDateOrder = (sortDateOrder) => { - return { - type: SET_SORT_DATE_ORDER, - sortDateOrder - } -} - -export const setLatestUIVersion = (latestUiVersion) => { - return { - type: SET_LATEST_UI_VERSION, - latestUiVersion - } -} - -export const showSettings = () => { - return { - type: SHOW_SETTINGS, - showSettings: true - } -} - -export const hideSettings = () => { - return { - type: SHOW_SETTINGS, - showSettings: false - } -} - -export const setSettings = (settings) => { - return { - type: SET_SETTINGS, - settings - } -} - -export const showBucketPolicy = () => { - return { - type: SHOW_BUCKET_POLICY, - showBucketPolicy: true - } -} - -export const hideBucketPolicy = () => { - return { - type: SHOW_BUCKET_POLICY, - showBucketPolicy: false - } -} - -export const setPolicies = (policies) => { - return { - type: SET_POLICIES, - policies - } -} - -export const checkedObjectsAdd = (objectName) => { - return { - type: CHECKED_OBJECTS_ADD, - objectName - } -} - -export const checkedObjectsRemove = (objectName) => { - return { - type: CHECKED_OBJECTS_REMOVE, - objectName - } -} - -export const checkedObjectsReset = (objectName) => { - return { - type: CHECKED_OBJECTS_RESET, - objectName - } -} diff --git a/browser/app/js/actions/__tests__/alert.test.js b/browser/app/js/actions/__tests__/alert.test.js new file mode 100644 index 000000000..ca5b3e240 --- /dev/null +++ b/browser/app/js/actions/__tests__/alert.test.js @@ -0,0 +1,57 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import configureStore from "redux-mock-store" +import thunk from "redux-thunk" +import * as actionsAlert from "../alert" + +const middlewares = [thunk] +const mockStore = configureStore(middlewares) + +jest.useFakeTimers() + +describe("Alert actions", () => { + it("creates alert/SET action", () => { + const store = mockStore() + const expectedActions = [ + { + type: "alert/SET", + alert: { id: 0, message: "Test alert", type: "danger" } + } + ] + store.dispatch(actionsAlert.set({ message: "Test alert", type: "danger" })) + const actions = store.getActions() + expect(actions).toEqual(expectedActions) + }) + + it("creates alert/CLEAR action for non danger alerts", () => { + const store = mockStore() + const expectedActions = [ + { + type: "alert/SET", + alert: { id: 1, message: "Test alert" } + }, + { + type: "alert/CLEAR", + alert: { id: 1 } + } + ] + store.dispatch(actionsAlert.set({ message: "Test alert" })) + jest.runAllTimers() + const actions = store.getActions() + expect(actions).toEqual(expectedActions) + }) +}) diff --git a/browser/app/js/actions/__tests__/buckets.test.js b/browser/app/js/actions/__tests__/buckets.test.js new file mode 100644 index 000000000..6218103f7 --- /dev/null +++ b/browser/app/js/actions/__tests__/buckets.test.js @@ -0,0 +1,41 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import configureStore from "redux-mock-store" +import thunk from "redux-thunk" +import * as actionsBuckets from "../buckets" + +jest.mock("../../web", () => ({ + ListBuckets: jest.fn(() => { + return Promise.resolve({ buckets: [{ name: "test1" }, { name: "test2" }] }) + }) +})) + +const middlewares = [thunk] +const mockStore = configureStore(middlewares) + +describe("Buckets actions", () => { + it("creates buckets/SET_LIST after fetching the buckets", () => { + const store = mockStore() + const expectedActions = [ + { type: "buckets/SET_LIST", buckets: ["test1", "test2"] } + ] + return store.dispatch(actionsBuckets.fetchBuckets()).then(() => { + const actions = store.getActions() + expect(actions).toEqual(expectedActions) + }) + }) +}) diff --git a/browser/app/js/actions/alert.js b/browser/app/js/actions/alert.js new file mode 100644 index 000000000..4bb73b352 --- /dev/null +++ b/browser/app/js/actions/alert.js @@ -0,0 +1,46 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export const SET = "alert/SET" +export const CLEAR = "alert/CLEAR" + +let alertId = 0 + +export const set = alert => { + const id = alertId++ + return (dispatch, getState) => { + if (alert.type !== "danger") { + setTimeout(() => { + dispatch({ + type: CLEAR, + alert: { + id + } + }) + }, 5000) + } + dispatch({ + type: SET, + alert: Object.assign({}, alert, { + id + }) + }) + } +} + +export const clear = () => { + return { type: CLEAR } +} diff --git a/browser/app/js/actions/buckets.js b/browser/app/js/actions/buckets.js new file mode 100644 index 000000000..74866ea00 --- /dev/null +++ b/browser/app/js/actions/buckets.js @@ -0,0 +1,51 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import web from "../web" + +export const SET_LIST = "buckets/SET_LIST" +export const SET_FILTER = "buckets/SET_FILTER" +export const SET_CURRENT_BUCKET = "buckets/SET_CURRENT_BUCKET" + +export const fetchBuckets = () => { + return function(dispatch) { + return web.ListBuckets().then(res => { + const buckets = res.buckets ? res.buckets.map(bucket => bucket.name) : [] + dispatch(setList(buckets)) + }) + } +} + +export const setList = buckets => { + return { + type: SET_LIST, + buckets + } +} + +export const setFilter = filter => { + return { + type: SET_FILTER, + filter + } +} + +export const setCurrentBucket = bucket => { + return { + type: SET_CURRENT_BUCKET, + bucket + } +} diff --git a/browser/app/js/components/Alert.js b/browser/app/js/components/Alert.js new file mode 100644 index 000000000..eb5a88ab4 --- /dev/null +++ b/browser/app/js/components/Alert.js @@ -0,0 +1,30 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from "react" +import AlertComponent from "react-bootstrap/lib/Alert" + +const Alert = ({ show, type, message, onDismiss }) => ( + +
{message}
+
+) + +export default Alert diff --git a/browser/app/js/components/App.js b/browser/app/js/components/App.js new file mode 100644 index 000000000..05fb52f72 --- /dev/null +++ b/browser/app/js/components/App.js @@ -0,0 +1,46 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from "react" +import { Route, Switch, Redirect } from "react-router-dom" +import Browser from "../components/Browser" +import Login from "../components/Login" +import web from "../web" +import { minioBrowserPrefix } from "../constants" + +const AuthorizedRoute = ({ component: Component, ...rest }) => ( + + web.LoggedIn() ? ( + + ) : ( + + ) + } + /> +) + +export const App = ({ match }) => ( + + + + + + +) + +export default App diff --git a/browser/app/js/components/Browse.js b/browser/app/js/components/Browse.js deleted file mode 100644 index b6fbe40f6..000000000 --- a/browser/app/js/components/Browse.js +++ /dev/null @@ -1,869 +0,0 @@ -/* - * Minio Cloud Storage (C) 2016 Minio, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react' -import classNames from 'classnames' -import browserHistory from 'react-router/lib/browserHistory' -import humanize from 'humanize' -import Moment from 'moment' -import Modal from 'react-bootstrap/lib/Modal' -import ModalBody from 'react-bootstrap/lib/ModalBody' -import ModalHeader from 'react-bootstrap/lib/ModalHeader' -import Alert from 'react-bootstrap/lib/Alert' -import OverlayTrigger from 'react-bootstrap/lib/OverlayTrigger' -import Tooltip from 'react-bootstrap/lib/Tooltip' -import Dropdown from 'react-bootstrap/lib/Dropdown' -import MenuItem from 'react-bootstrap/lib/MenuItem' -import InputGroup from '../components/InputGroup' -import Dropzone from '../components/Dropzone' -import ObjectsList from '../components/ObjectsList' -import SideBar from '../components/SideBar' -import Path from '../components/Path' -import BrowserUpdate from '../components/BrowserUpdate' -import UploadModal from '../components/UploadModal' -import SettingsModal from '../components/SettingsModal' -import PolicyInput from '../components/PolicyInput' -import Policy from '../components/Policy' -import BrowserDropdown from '../components/BrowserDropdown' -import ConfirmModal from './ConfirmModal' -import logo from '../../img/logo.svg' -import * as actions from '../actions' -import * as utils from '../utils' -import * as mime from '../mime' -import { minioBrowserPrefix } from '../constants' -import CopyToClipboard from 'react-copy-to-clipboard' -import storage from 'local-storage-fallback' -import InfiniteScroll from 'react-infinite-scroller'; - -export default class Browse extends React.Component { - componentDidMount() { - const {web, dispatch, currentBucket} = this.props - if (!web.LoggedIn()) return - web.StorageInfo() - .then(res => { - let storageInfo = Object.assign({}, { - total: res.storageInfo.Total, - free: res.storageInfo.Free - }) - storageInfo.used = storageInfo.total - storageInfo.free - dispatch(actions.setStorageInfo(storageInfo)) - return web.ServerInfo() - }) - .then(res => { - let serverInfo = Object.assign({}, { - version: res.MinioVersion, - memory: res.MinioMemory, - platform: res.MinioPlatform, - runtime: res.MinioRuntime, - info: res.MinioGlobalInfo - }) - dispatch(actions.setServerInfo(serverInfo)) - }) - .catch(err => { - dispatch(actions.showAlert({ - type: 'danger', - message: err.message - })) - }) - } - - componentWillMount() { - const {dispatch} = this.props - // Clear out any stale message in the alert of Login page - dispatch(actions.showAlert({ - type: 'danger', - message: '' - })) - if (web.LoggedIn()) { - web.ListBuckets() - .then(res => { - let buckets - if (!res.buckets) - buckets = [] - else - buckets = res.buckets.map(bucket => bucket.name) - if (buckets.length) { - dispatch(actions.setBuckets(buckets)) - dispatch(actions.setVisibleBuckets(buckets)) - if (location.pathname === minioBrowserPrefix || location.pathname === minioBrowserPrefix + '/') { - browserHistory.push(utils.pathJoin(buckets[0])) - } - } - }) - } - this.history = browserHistory.listen(({pathname}) => { - let decPathname = decodeURI(pathname) - if (decPathname === `${minioBrowserPrefix}/login`) return // FIXME: better organize routes and remove this - if (!decPathname.endsWith('/')) - decPathname += '/' - if (decPathname === minioBrowserPrefix + '/') { - return - } - let obj = utils.pathSlice(decPathname) - if (!web.LoggedIn()) { - dispatch(actions.setBuckets([obj.bucket])) - dispatch(actions.setVisibleBuckets([obj.bucket])) - } - dispatch(actions.selectBucket(obj.bucket, obj.prefix)) - }) - } - - componentWillUnmount() { - this.history() - } - - selectBucket(e, bucket) { - e.preventDefault() - if (bucket === this.props.currentBucket) return - browserHistory.push(utils.pathJoin(bucket)) - } - - searchBuckets(e) { - e.preventDefault() - let {buckets} = this.props - this.props.dispatch(actions.setVisibleBuckets(buckets.filter(bucket => bucket.indexOf(e.target.value) > -1))) - } - - listObjects() { - const {dispatch} = this.props - dispatch(actions.listObjects()) - } - - selectPrefix(e, prefix) { - e.preventDefault() - const {dispatch, currentPath, web, currentBucket} = this.props - const encPrefix = encodeURI(prefix) - if (prefix.endsWith('/') || prefix === '') { - if (prefix === currentPath) return - browserHistory.push(utils.pathJoin(currentBucket, encPrefix)) - } else { - if (!web.LoggedIn()) { - let url = `${window.location.origin}/minio/download/${currentBucket}/${encPrefix}?token=''` - window.location = url - } else { - // Download the selected file. - web.CreateURLToken() - .then(res => { - let url = `${window.location.origin}${minioBrowserPrefix}/download/${currentBucket}/${encPrefix}?token=${res.token}` - window.location = url - }) - .catch(err => dispatch(actions.showAlert({ - type: 'danger', - message: err.message - }))) - } - } - } - - makeBucket(e) { - e.preventDefault() - const bucketName = this.refs.makeBucketRef.value - this.refs.makeBucketRef.value = '' - const {web, dispatch} = this.props - this.hideMakeBucketModal() - web.MakeBucket({ - bucketName - }) - .then(() => { - dispatch(actions.addBucket(bucketName)) - dispatch(actions.selectBucket(bucketName)) - }) - .catch(err => dispatch(actions.showAlert({ - type: 'danger', - message: err.message - }))) - } - - hideMakeBucketModal() { - const {dispatch} = this.props - dispatch(actions.hideMakeBucketModal()) - } - - showMakeBucketModal(e) { - e.preventDefault() - const {dispatch} = this.props - dispatch(actions.showMakeBucketModal()) - } - - showAbout(e) { - e.preventDefault() - const {dispatch} = this.props - dispatch(actions.showAbout()) - } - - hideAbout(e) { - e.preventDefault() - const {dispatch} = this.props - dispatch(actions.hideAbout()) - } - - toggleBucketDropdown(e) { - const {dispatch, showBucketDropdown} = this.props - if (showBucketDropdown) { - dispatch(actions.hideBucketDropdown()) - } else { - dispatch(actions.showBucketDropdown()) - } - } - - showBucketPolicy(e) { - e.preventDefault() - const {dispatch} = this.props - this.toggleBucketDropdown(e) - dispatch(actions.showBucketPolicy()) - } - - hideBucketPolicy(e) { - e.preventDefault() - const {dispatch} = this.props - dispatch(actions.hideBucketPolicy()) - } - - deleteBucket(e, bucket) { - e.preventDefault() - const {dispatch} = this.props - this.toggleBucketDropdown(e) - dispatch(actions.deleteBucket(bucket)) - browserHistory.push(`${minioBrowserPrefix}/`) - } - - uploadFile(e) { - e.preventDefault() - const {dispatch, buckets, currentBucket} = this.props - if (buckets.length === 0) { - dispatch(actions.showAlert({ - type: 'danger', - message: "Bucket needs to be created before trying to upload files." - })) - return - } - if (currentBucket === '') { - dispatch(actions.showAlert({ - type: 'danger', - message: "Please choose a bucket before trying to upload files." - })) - return - } - let file = e.target.files[0] - e.target.value = null - this.xhr = new XMLHttpRequest() - dispatch(actions.uploadFile(file, this.xhr)) - } - - removeObject() { - const {web, dispatch, currentPath, currentBucket, deleteConfirmation, checkedObjects} = this.props - let objects = [] - if (checkedObjects.length > 0) { - objects = checkedObjects.map(obj => `${currentPath}${obj}`) - } else { - objects = [deleteConfirmation.object] - } - - web.RemoveObject({ - bucketname: currentBucket, - objects: objects - }) - .then(() => { - this.hideDeleteConfirmation() - if (checkedObjects.length > 0) { - for (let i = 0; i < checkedObjects.length; i++) { - dispatch(actions.removeObject(checkedObjects[i].replace(currentPath, ''))) - } - dispatch(actions.checkedObjectsReset()) - } else { - let delObject = deleteConfirmation.object.replace(currentPath, '') - dispatch(actions.removeObject(delObject)) - } - }) - .catch(e => dispatch(actions.showAlert({ - type: 'danger', - message: e.message - }))) - } - - hideAlert(e) { - e.preventDefault() - const {dispatch} = this.props - dispatch(actions.hideAlert()) - } - - showDeleteConfirmation(e, object) { - e.preventDefault() - const {dispatch} = this.props - dispatch(actions.showDeleteConfirmation(object)) - } - - hideDeleteConfirmation() { - const {dispatch} = this.props - dispatch(actions.hideDeleteConfirmation()) - } - - shareObject(e, object) { - e.preventDefault() - const {dispatch} = this.props - // let expiry = 5 * 24 * 60 * 60 // 5 days expiry by default - dispatch(actions.shareObject(object, 5, 0, 0)) - } - - hideShareObjectModal() { - const {dispatch} = this.props - dispatch(actions.hideShareObject()) - } - - dataType(name, contentType) { - return mime.getDataType(name, contentType) - } - - sortObjectsByName(e) { - const {dispatch, objects, sortNameOrder} = this.props - dispatch(actions.setObjects(utils.sortObjectsByName(objects, !sortNameOrder))) - dispatch(actions.setSortNameOrder(!sortNameOrder)) - } - - sortObjectsBySize() { - const {dispatch, objects, sortSizeOrder} = this.props - dispatch(actions.setObjects(utils.sortObjectsBySize(objects, !sortSizeOrder))) - dispatch(actions.setSortSizeOrder(!sortSizeOrder)) - } - - sortObjectsByDate() { - const {dispatch, objects, sortDateOrder} = this.props - dispatch(actions.setObjects(utils.sortObjectsByDate(objects, !sortDateOrder))) - dispatch(actions.setSortDateOrder(!sortDateOrder)) - } - - logout(e) { - const {web} = this.props - e.preventDefault() - web.Logout() - browserHistory.push(`${minioBrowserPrefix}/login`) - } - - fullScreen(e) { - e.preventDefault() - let el = document.documentElement - if (el.requestFullscreen) { - el.requestFullscreen() - } - if (el.mozRequestFullScreen) { - el.mozRequestFullScreen() - } - if (el.webkitRequestFullscreen) { - el.webkitRequestFullscreen() - } - if (el.msRequestFullscreen) { - el.msRequestFullscreen() - } - } - - toggleSidebar(status) { - this.props.dispatch(actions.setSidebarStatus(status)) - } - - hideSidebar(event) { - let e = event || window.event; - - // Support all browsers. - let target = e.srcElement || e.target; - if (target.nodeType === 3) // Safari support. - target = target.parentNode; - - let targetID = target.id; - if (!(targetID === 'feh-trigger')) { - this.props.dispatch(actions.setSidebarStatus(false)) - } - } - - showSettings(e) { - e.preventDefault() - - const {dispatch} = this.props - dispatch(actions.showSettings()) - } - - showMessage() { - const {dispatch} = this.props - dispatch(actions.showAlert({ - type: 'success', - message: 'Link copied to clipboard!' - })) - this.hideShareObjectModal() - } - - selectTexts() { - this.refs.copyTextInput.select() - } - - handleExpireValue(targetInput, inc, object) { - let value = this.refs[targetInput].value - let maxValue = (targetInput == 'expireHours') ? 23 : (targetInput == 'expireMins') ? 59 : (targetInput == 'expireDays') ? 7 : 0 - value = isNaN(value) ? 0 : value - - // Use custom step count to support browser Edge - if((inc === -1)) { - if(value != 0) { - value-- - } - } - else { - if(value != maxValue) { - value++ - } - } - this.refs[targetInput].value = value - - // Reset hours and mins when days reaches it's max value - if (this.refs.expireDays.value == 7) { - this.refs.expireHours.value = 0 - this.refs.expireMins.value = 0 - } - if (this.refs.expireDays.value + this.refs.expireHours.value + this.refs.expireMins.value == 0) { - this.refs.expireDays.value = 7 - } - - const {dispatch} = this.props - dispatch(actions.shareObject(object, this.refs.expireDays.value, this.refs.expireHours.value, this.refs.expireMins.value)) - } - - checkObject(e, objectName) { - const {dispatch} = this.props - e.target.checked ? dispatch(actions.checkedObjectsAdd(objectName)) : dispatch(actions.checkedObjectsRemove(objectName)) - } - - downloadSelected() { - const {dispatch, web} = this.props - let req = { - bucketName: this.props.currentBucket, - objects: this.props.checkedObjects, - prefix: this.props.currentPath - } - if (!web.LoggedIn()) { - let requestUrl = location.origin + "/minio/zip?token=''" - this.xhr = new XMLHttpRequest() - dispatch(actions.downloadSelected(requestUrl, req, this.xhr)) - } else { - web.CreateURLToken() - .then(res => { - let requestUrl = location.origin + minioBrowserPrefix + "/zip?token=" + res.token - this.xhr = new XMLHttpRequest() - dispatch(actions.downloadSelected(requestUrl, req, this.xhr)) - }) - .catch(err => dispatch(actions.showAlert({ - type: 'danger', - message: err.message - }))) - } - } - - clearSelected() { - const {dispatch} = this.props - dispatch(actions.checkedObjectsReset()) - } - - render() { - const {total, free} = this.props.storageInfo - const {showMakeBucketModal, alert, sortNameOrder, sortSizeOrder, sortDateOrder, showAbout, showBucketPolicy, checkedObjects} = this.props - const {version, memory, platform, runtime} = this.props.serverInfo - const {sidebarStatus} = this.props - const {showSettings} = this.props - const {policies, currentBucket, currentPath} = this.props - const {deleteConfirmation} = this.props - const {shareObject} = this.props - const {web, prefixWritable, istruncated} = this.props - - // Don't always show the SettingsModal. This is done here instead of in - // SettingsModal.js so as to allow for #componentWillMount to handle - // the loading of the settings. - let settingsModal = showSettings ? : - - let alertBox = -
- { alert.message } -
-
- // Make sure you don't show a fading out alert box on the initial web-page load. - if (!alert.message) - alertBox = '' - - let signoutTooltip = - Sign out - - let uploadTooltip = - Upload file - - let makeBucketTooltip = - Create bucket - - let loginButton = '' - let browserDropdownButton = '' - let storageUsageDetails = '' - - let used = total - free - let usedPercent = (used / total) * 100 + '%' - let freePercent = free * 100 / total - - if (web.LoggedIn()) { - browserDropdownButton = - } else { - loginButton = Login - } - - if (web.LoggedIn()) { - if (!(used === 0 && free === 0)) { - storageUsageDetails =
-
-
-
-
    -
  • - Used: - { humanize.filesize(total - free) } -
  • -
  • - Free: - { humanize.filesize(total - used) } -
  • -
-
- } - - - } - - let createButton = '' - if (web.LoggedIn()) { - createButton = - - - - - - - - - - - - - - - - - } else { - if (prefixWritable) - createButton = - - - - - - - - - - - - - } - - return ( -
- -
-
0 - })) }> - { checkedObjects.length } Objects selected - - - -
- - { alertBox } -
-
-
-
-
-
-
-
- -
-
- - { storageUsageDetails } -
    - - { loginButton } - { browserDropdownButton } -
-
-
-
-
-
- Name - -
-
- Size - -
-
- Last Modified - -
-
-
-
-
- - - -
- Loading... -
-
- - { createButton } - - - -
-
- - -
-
-
-
- - -
-
- -
-
-
    -
  • -
    - Version -
    - { version } -
  • -
  • -
    - Memory -
    - { memory } -
  • -
  • -
    - Platform -
    - { platform } -
  • -
  • -
    - Runtime -
    - { runtime } -
  • -
-
-
-
- - - Bucket Policy ( - { currentBucket }) - - -
- - { policies.map((policy, i) => - ) } -
-
- - - - - Share Object - - -
- - -
-
- -
-
- -
- Days -
-
- -
- -
-
- -
- Hours -
-
- -
- -
-
- -
- Minutes -
-
- -
- -
-
-
-
-
- - - - -
-
- { settingsModal } -
-
-
- ) - } -} diff --git a/browser/app/js/components/Browser.js b/browser/app/js/components/Browser.js new file mode 100644 index 000000000..948eefa6e --- /dev/null +++ b/browser/app/js/components/Browser.js @@ -0,0 +1,36 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from "react" +import classNames from "classnames" +import { connect } from "react-redux" +import SideBar from "./SideBar" + +class Browser extends React.Component { + render() { + return ( +
+ +
+ ) + } +} + +export default connect(state => state)(Browser) diff --git a/browser/app/js/components/Bucket.js b/browser/app/js/components/Bucket.js new file mode 100644 index 000000000..bd05209b1 --- /dev/null +++ b/browser/app/js/components/Bucket.js @@ -0,0 +1,43 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from "react" +import classNames from "classnames" + +export const Bucket = ({ bucket, isActive, selectBucket }) => { + return ( +
  • { + e.preventDefault() + selectBucket(bucket) + }} + > + + {bucket} + +
  • + ) +} + +export default Bucket diff --git a/browser/app/js/components/BucketContainer.js b/browser/app/js/components/BucketContainer.js new file mode 100644 index 000000000..9469407a3 --- /dev/null +++ b/browser/app/js/components/BucketContainer.js @@ -0,0 +1,35 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from "react" +import { connect } from "react-redux" +import * as actionsBuckets from "../actions/buckets" +import { getCurrentBucket } from "../selectors/buckets" +import Bucket from "./Bucket" + +const mapStateToProps = (state, ownProps) => { + return { + isActive: getCurrentBucket(state) === ownProps.bucket + } +} + +const mapDispatchToProps = dispatch => { + return { + selectBucket: bucket => dispatch(actionsBuckets.setCurrentBucket(bucket)) + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(Bucket) diff --git a/browser/app/js/components/BucketList.js b/browser/app/js/components/BucketList.js new file mode 100644 index 000000000..b06294a42 --- /dev/null +++ b/browser/app/js/components/BucketList.js @@ -0,0 +1,59 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from "react" +import { connect } from "react-redux" +import { Scrollbars } from "react-custom-scrollbars" +import * as actionsBuckets from "../actions/buckets" +import { getVisibleBuckets } from "../selectors/buckets" +import BucketContainer from "./BucketContainer" + +export class BucketList extends React.Component { + componentWillMount() { + const { fetchBuckets } = this.props + fetchBuckets() + } + render() { + const { visibleBuckets } = this.props + return ( +
    +
    } + > +
      + {visibleBuckets.map(bucket => ( + + ))} +
    + +
    + ) + } +} + +const mapStateToProps = state => { + return { + visibleBuckets: getVisibleBuckets(state) + } +} + +const mapDispatchToProps = dispatch => { + return { + fetchBuckets: () => dispatch(actionsBuckets.fetchBuckets()) + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(BucketList) diff --git a/browser/app/js/components/BucketSearch.js b/browser/app/js/components/BucketSearch.js new file mode 100644 index 000000000..2f13320bb --- /dev/null +++ b/browser/app/js/components/BucketSearch.js @@ -0,0 +1,44 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from "react" +import { connect } from "react-redux" +import * as actionsBuckets from "../actions/buckets" + +export const BucketSearch = ({ onChange }) => ( +
    + onChange(e.target.value)} + placeholder="Search Buckets..." + /> + +
    +) + +const mapDispatchToProps = dispatch => { + return { + onChange: filter => { + dispatch(actionsBuckets.setFilter(filter)) + } + } +} + +export default connect(undefined, mapDispatchToProps)(BucketSearch) diff --git a/browser/app/js/components/Host.js b/browser/app/js/components/Host.js new file mode 100644 index 000000000..233167332 --- /dev/null +++ b/browser/app/js/components/Host.js @@ -0,0 +1,26 @@ +/* + * Minio Cloud Storage (C) 2016, 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from "react" + +export const Host = () => ( + +) + +export default Host diff --git a/browser/app/js/components/Login.js b/browser/app/js/components/Login.js index 914df95f9..e74375942 100644 --- a/browser/app/js/components/Login.js +++ b/browser/app/js/components/Login.js @@ -1,5 +1,5 @@ /* - * Minio Cloud Storage (C) 2016 Minio, Inc. + * Minio Cloud Storage (C) 2016, 2018 Minio, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,115 +14,118 @@ * limitations under the License. */ -import React from 'react' -import classNames from 'classnames' -import logo from '../../img/logo.svg' -import Alert from 'react-bootstrap/lib/Alert' -import * as actions from '../actions' -import InputGroup from '../components/InputGroup' +import React from "react" +import { connect } from "react-redux" +import classNames from "classnames" +import logo from "../../img/logo.svg" +import Alert from "./Alert" +import * as actionsAlert from "../actions/alert" +import InputGroup from "../components/InputGroup" +import { minioBrowserPrefix } from "../constants" +import web from "../web" +import { Redirect } from "react-router-dom" -export default class Login extends React.Component { +export class Login extends React.Component { handleSubmit(event) { event.preventDefault() - const {web, dispatch, loginRedirectPath} = this.props - let message = '' - if (!document.getElementById('accessKey').value) { - message = 'Secret Key cannot be empty' + const { dispatch, history } = this.props + let message = "" + if (!document.getElementById("accessKey").value) { + message = "Secret Key cannot be empty" } - if (!document.getElementById('secretKey').value) { - message = 'Access Key cannot be empty' + if (!document.getElementById("secretKey").value) { + message = "Access Key cannot be empty" } if (message) { - dispatch(actions.showAlert({ - type: 'danger', - message - })) + dispatch( + actionsAlert.set({ + type: "danger", + message + }) + ) return } - web.Login({ - username: document.getElementById('accessKey').value, - password: document.getElementById('secretKey').value - }) - .then((res) => { - this.context.router.push(loginRedirectPath) + web + .Login({ + username: document.getElementById("accessKey").value, + password: document.getElementById("secretKey").value + }) + .then(res => { + history.push(minioBrowserPrefix) }) .catch(e => { - dispatch(actions.setLoginError()) - dispatch(actions.showAlert({ - type: 'danger', - message: e.message - })) + dispatch( + actionsAlert.set({ + type: "danger", + message: e.message + }) + ) }) } componentWillMount() { - const {dispatch} = this.props + const { dispatch } = this.props // Clear out any stale message in the alert of previous page - dispatch(actions.showAlert({ - type: 'danger', - message: '' - })) - document.body.classList.add('is-guest') + dispatch(actionsAlert.clear()) + document.body.classList.add("is-guest") } componentWillUnmount() { - document.body.classList.remove('is-guest') + document.body.classList.remove("is-guest") } - hideAlert() { - const {dispatch} = this.props - dispatch(actions.hideAlert()) + clearAlert() { + const { dispatch } = this.props + dispatch(actionsAlert.clear()) } render() { - const {alert} = this.props - let alertBox = -
    - { alert.message } -
    -
    + const { alert } = this.props + if (web.LoggedIn()) { + return + } + let alertBox = // Make sure you don't show a fading out alert box on the initial web-page load. - if (!alert.message) - alertBox = '' + if (!alert.message) alertBox = "" return (
    - { alertBox } + {alertBox}
    -
    - + - - + - + autoComplete="new-password" + />
    - -
    - { window.location.host } -
    + + + +
    {window.location.host}
    ) } } -Login.contextTypes = { - router: React.PropTypes.object.isRequired -} +export default connect(state => state)(Login) diff --git a/browser/app/js/components/SideBar.js b/browser/app/js/components/SideBar.js index 40d3c07f4..bb1607ef1 100644 --- a/browser/app/js/components/SideBar.js +++ b/browser/app/js/components/SideBar.js @@ -1,5 +1,5 @@ /* - * Minio Cloud Storage (C) 2016 Minio, Inc. + * Minio Cloud Storage (C) 2016, 2018 Minio, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,86 +14,37 @@ * limitations under the License. */ -import React from 'react' -import classNames from 'classnames' -import ClickOutHandler from 'react-onclickout' -import Scrollbars from 'react-custom-scrollbars/lib/Scrollbars' -import connect from 'react-redux/lib/components/connect' +import React from "react" +import classNames from "classnames" +import ClickOutHandler from "react-onclickout" +import { connect } from "react-redux" -import logo from '../../img/logo.svg' -import Dropdown from 'react-bootstrap/lib/Dropdown' - -let SideBar = ({visibleBuckets, loadBucket, currentBucket, selectBucket, searchBuckets, sidebarStatus, clickOutside, showPolicy, deleteBucket, toggleBucketDropdown, showBucketDropdown}) => { - - const list = visibleBuckets.map((bucket, i) => { - return
  • selectBucket(e, bucket) }> - - { bucket } - - - - - - -
  • - Edit policy -
  • -
  • - deleteBucket(e, bucket) }>Delete -
  • - - - - }) +import logo from "../../img/logo.svg" +import Dropdown from "react-bootstrap/lib/Dropdown" +import BucketSearch from "./BucketSearch" +import BucketList from "./BucketList" +import Host from "./Host" +export const SideBar = () => { return ( - -
    + +
    - +

    Minio Browser

    -
    - - -
    -
    -
    }> -
      - { list } -
    - -
    -
    - +
    ) } -// Subscribe it to state changes that affect only the sidebar. -export default connect(state => { - return { - visibleBuckets: state.visibleBuckets, - loadBucket: state.loadBucket, - currentBucket: state.currentBucket, - showBucketDropdown: state.showBucketDropdown, - sidebarStatus: state.sidebarStatus - } -})(SideBar) +export default connect(state => state)(SideBar) diff --git a/browser/app/js/components/__tests__/Bucket.test.js b/browser/app/js/components/__tests__/Bucket.test.js new file mode 100644 index 000000000..b25fb90e0 --- /dev/null +++ b/browser/app/js/components/__tests__/Bucket.test.js @@ -0,0 +1,39 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from "react" +import { shallow } from "enzyme" +import { Bucket } from "../Bucket" + +describe("Bucket", () => { + it("should render without crashing", () => { + shallow() + }) + + it("should call selectBucket when clicked", () => { + const selectBucket = jest.fn() + const wrapper = shallow( + + ) + wrapper.find("li").simulate("click", { preventDefault: jest.fn() }) + expect(selectBucket).toHaveBeenCalledWith("test") + }) + + it("should highlight the selected bucket", () => { + const wrapper = shallow() + expect(wrapper.find("li").hasClass("active")).toBeTruthy() + }) +}) diff --git a/browser/app/js/components/__tests__/BucketList.test.js b/browser/app/js/components/__tests__/BucketList.test.js new file mode 100644 index 000000000..cda8bf5ad --- /dev/null +++ b/browser/app/js/components/__tests__/BucketList.test.js @@ -0,0 +1,29 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from "react" +import { shallow } from "enzyme" +import { BucketList } from "../BucketList" + +describe("Bucket", () => { + it("should call fetchBuckets before component is mounted", () => { + const fetchBuckets = jest.fn() + const wrapper = shallow( + + ) + expect(fetchBuckets).toHaveBeenCalled() + }) +}) diff --git a/browser/app/js/components/__tests__/BucketSearch.test.js b/browser/app/js/components/__tests__/BucketSearch.test.js new file mode 100644 index 000000000..082c03f2a --- /dev/null +++ b/browser/app/js/components/__tests__/BucketSearch.test.js @@ -0,0 +1,32 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from "react" +import { shallow } from "enzyme" +import { BucketSearch } from "../BucketSearch" + +describe("BucketSearch", () => { + it("should render without crashing", () => { + shallow() + }) + + it("should call onChange with search text", () => { + const onChange = jest.fn() + const wrapper = shallow() + wrapper.find("input").simulate("change", { target: { value: "test" } }) + expect(onChange).toHaveBeenCalledWith("test") + }) +}) diff --git a/browser/app/js/components/__tests__/Login-test.js b/browser/app/js/components/__tests__/Login-test.js deleted file mode 100644 index ac3b3dd6d..000000000 --- a/browser/app/js/components/__tests__/Login-test.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Minio Cloud Storage (C) 2016 Minio, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* -import React from 'react' -import ReactTestUtils, {renderIntoDocument} from 'react-addons-test-utils' - -import expect from 'expect' -import Login from '../Login' - -describe('Login', () => { - it('it should have empty credentials', () => { - const alert = { - show: false - } - const dispatch = () => {} - let loginComponent = renderIntoDocument() - const accessKey = document.getElementById('accessKey') - const secretKey = document.getElementById('secretKey') - // Validate default value. - expect(accessKey.value).toEqual('') - expect(secretKey.value).toEqual('') - }) - it('it should set accessKey and secretKey', () => { - const alert = { - show: false - } - const dispatch = () => {} - let loginComponent = renderIntoDocument() - let accessKey = loginComponent.refs.accessKey - let secretKey = loginComponent.refs.secretKey - accessKey.value = 'demo-username' - secretKey.value = 'demo-password' - ReactTestUtils.Simulate.change(accessKey) - ReactTestUtils.Simulate.change(secretKey) - // Validate if the change has occurred. - expect(loginComponent.refs.accessKey.value).toEqual('demo-username') - expect(loginComponent.refs.secretKey.value).toEqual('demo-password') - }) -}); -*/ diff --git a/browser/app/js/jest/setup.js b/browser/app/js/jest/setup.js new file mode 100644 index 000000000..d5d001620 --- /dev/null +++ b/browser/app/js/jest/setup.js @@ -0,0 +1,21 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import "jest-enzyme" +import { configure } from "enzyme" +import Adapter from "enzyme-adapter-react-16" + +configure({ adapter: new Adapter() }) diff --git a/browser/app/js/loader.js b/browser/app/js/loader.js new file mode 100644 index 000000000..a8e6ed1a3 --- /dev/null +++ b/browser/app/js/loader.js @@ -0,0 +1,30 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +let delay = [0, 400] + +function handleLoader(i) { + if (i < 2) { + setTimeout(function() { + document.querySelector(".page-load").classList.add("pl-" + i) + handleLoader(i + 1) + }, delay[i]) + } +} + +const hideLoader = () => handleLoader(0) + +export default hideLoader diff --git a/browser/app/js/reducers.js b/browser/app/js/reducers.js deleted file mode 100644 index 2c4eab25b..000000000 --- a/browser/app/js/reducers.js +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Minio Cloud Storage (C) 2016 Minio, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as actions from './actions' -import { minioBrowserPrefix } from './constants' - -export default (state = { - buckets: [], - visibleBuckets: [], - objects: [], - istruncated: true, - storageInfo: {}, - serverInfo: {}, - currentBucket: '', - showBucketDropdown: false, - currentPath: '', - showMakeBucketModal: false, - uploads: {}, - alert: { - show: false, - type: 'danger', - message: '' - }, - loginError: false, - sortNameOrder: false, - sortSizeOrder: false, - sortDateOrder: false, - latestUiVersion: currentUiVersion, - sideBarActive: false, - loginRedirectPath: minioBrowserPrefix, - settings: { - accessKey: '', - secretKey: '', - secretKeyVisible: false - }, - showSettings: false, - policies: [], - deleteConfirmation: { - object: '', - show: false - }, - shareObject: { - show: false, - url: '', - object: '' - }, - prefixWritable: false, - checkedObjects: [] - }, action) => { - let newState = Object.assign({}, state) - switch (action.type) { - case actions.SET_WEB: - newState.web = action.web - break - case actions.SET_BUCKETS: - newState.buckets = action.buckets - break - case actions.ADD_BUCKET: - newState.buckets = [action.bucket, ...newState.buckets] - newState.visibleBuckets = [action.bucket, ...newState.visibleBuckets] - break - case actions.REMOVE_BUCKET: - newState.buckets = newState.buckets.filter(bucket => bucket != action.bucket) - newState.visibleBuckets = newState.visibleBuckets.filter(bucket => bucket != action.bucket) - newState.currentBucket = "" - break - case actions.SHOW_BUCKET_DROPDOWN: - newState.showBucketDropdown = action.showBucketDropdown - break - case actions.SET_VISIBLE_BUCKETS: - newState.visibleBuckets = action.visibleBuckets - break - case actions.SET_CURRENT_BUCKET: - newState.currentBucket = action.currentBucket - break - case actions.APPEND_OBJECTS: - newState.objects = [...newState.objects, ...action.objects] - newState.marker = action.marker - newState.istruncated = action.istruncated - break - case actions.SET_OBJECTS: - newState.objects = [...action.objects] - break - case actions.RESET_OBJECTS: - newState.objects = [] - newState.marker = "" - newState.istruncated = false - break - case actions.SET_CURRENT_PATH: - newState.currentPath = action.currentPath - break - case actions.SET_STORAGE_INFO: - newState.storageInfo = action.storageInfo - break - case actions.SET_SERVER_INFO: - newState.serverInfo = action.serverInfo - break - case actions.SHOW_MAKEBUCKET_MODAL: - newState.showMakeBucketModal = action.showMakeBucketModal - break - case actions.UPLOAD_PROGRESS: - newState.uploads = Object.assign({}, newState.uploads) - newState.uploads[action.slug].loaded = action.loaded - break - case actions.ADD_UPLOAD: - newState.uploads = Object.assign({}, newState.uploads, { - [action.slug]: { - loaded: 0, - size: action.size, - xhr: action.xhr, - name: action.name - } - }) - break - case actions.STOP_UPLOAD: - newState.uploads = Object.assign({}, newState.uploads) - delete newState.uploads[action.slug] - break - case actions.SET_ALERT: - if (newState.alert.alertTimeout) clearTimeout(newState.alert.alertTimeout) - if (!action.alert.show) { - newState.alert = Object.assign({}, newState.alert, { - show: false - }) - } else { - newState.alert = action.alert - } - break - case actions.SET_LOGIN_ERROR: - newState.loginError = true - break - case actions.SET_SHOW_ABORT_MODAL: - newState.showAbortModal = action.showAbortModal - break - case actions.SHOW_ABOUT: - newState.showAbout = action.showAbout - break - case actions.SET_SORT_NAME_ORDER: - newState.sortNameOrder = action.sortNameOrder - break - case actions.SET_SORT_SIZE_ORDER: - newState.sortSizeOrder = action.sortSizeOrder - break - case actions.SET_SORT_DATE_ORDER: - newState.sortDateOrder = action.sortDateOrder - break - case actions.SET_LATEST_UI_VERSION: - newState.latestUiVersion = action.latestUiVersion - break - case actions.SET_SIDEBAR_STATUS: - newState.sidebarStatus = action.sidebarStatus - break - case actions.SET_LOGIN_REDIRECT_PATH: - newState.loginRedirectPath = action.path - case actions.SET_LOAD_BUCKET: - newState.loadBucket = action.loadBucket - break - case actions.SET_LOAD_PATH: - newState.loadPath = action.loadPath - break - case actions.SHOW_SETTINGS: - newState.showSettings = action.showSettings - break - case actions.SET_SETTINGS: - newState.settings = Object.assign({}, newState.settings, action.settings) - break - case actions.SHOW_BUCKET_POLICY: - newState.showBucketPolicy = action.showBucketPolicy - break - case actions.SET_POLICIES: - newState.policies = action.policies - break - case actions.DELETE_CONFIRMATION: - newState.deleteConfirmation = Object.assign({}, action.payload) - break - case actions.SET_SHARE_OBJECT: - newState.shareObject = Object.assign({}, action.shareObject) - break - case actions.SET_PREFIX_WRITABLE: - newState.prefixWritable = action.prefixWritable - break - case actions.REMOVE_OBJECT: - let idx = newState.objects.findIndex(object => object.name === action.object) - if (idx == -1) break - newState.objects = [...newState.objects.slice(0, idx), ...newState.objects.slice(idx + 1)] - break - - case actions.CHECKED_OBJECTS_ADD: - newState.checkedObjects = [...newState.checkedObjects, action.objectName] - break - case actions.CHECKED_OBJECTS_REMOVE: - let index = newState.checkedObjects.indexOf(action.objectName) - if (index == -1) break - newState.checkedObjects = [...newState.checkedObjects.slice(0, index), ...newState.checkedObjects.slice(index + 1)] - break - case actions.CHECKED_OBJECTS_RESET: - newState.checkedObjects = [] - break - } - - return newState -} diff --git a/browser/app/js/reducers/__tests__/alert.test.js b/browser/app/js/reducers/__tests__/alert.test.js new file mode 100644 index 000000000..c7ed1c9a9 --- /dev/null +++ b/browser/app/js/reducers/__tests__/alert.test.js @@ -0,0 +1,87 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import reducer from "../alert" +import * as actionsAlert from "../../actions/alert" + +describe("buckets reducer", () => { + it("should return the initial state", () => { + expect(reducer(undefined, {})).toEqual({ + show: false, + type: "danger" + }) + }) + + it("should handle SET_ALERT", () => { + expect( + reducer(undefined, { + type: actionsAlert.SET, + alert: { id: 1, type: "danger", message: "Test message" } + }) + ).toEqual({ + show: true, + id: 1, + type: "danger", + message: "Test message" + }) + }) + + it("should clear alert if id not passed", () => { + expect( + reducer( + { show: true, type: "danger", message: "Test message" }, + { + type: actionsAlert.CLEAR + } + ) + ).toEqual({ + show: false, + type: "danger" + }) + }) + + it("should clear alert if id is matching", () => { + expect( + reducer( + { show: true, id: 1, type: "danger", message: "Test message" }, + { + type: actionsAlert.CLEAR, + alert: { id: 1 } + } + ) + ).toEqual({ + show: false, + type: "danger" + }) + }) + + it("should not clear alert if id is not matching", () => { + expect( + reducer( + { show: true, id: 1, type: "danger", message: "Test message" }, + { + type: actionsAlert.CLEAR, + alert: { id: 2 } + } + ) + ).toEqual({ + show: true, + id: 1, + type: "danger", + message: "Test message" + }) + }) +}) diff --git a/browser/app/js/reducers/__tests__/buckets.test.js b/browser/app/js/reducers/__tests__/buckets.test.js new file mode 100644 index 000000000..84fec4f2e --- /dev/null +++ b/browser/app/js/reducers/__tests__/buckets.test.js @@ -0,0 +1,64 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import reducer from "../buckets" +import * as actions from "../../actions/buckets" + +describe("buckets reducer", () => { + it("should return the initial state", () => { + expect(reducer(undefined, {})).toEqual({ + list: [], + filter: "", + currentBucket: "" + }) + }) + + it("should handle SET_BUCKETS", () => { + expect( + reducer(undefined, { type: actions.SET_LIST, buckets: ["bk1", "bk2"] }) + ).toEqual({ + list: ["bk1", "bk2"], + filter: "", + currentBucket: "" + }) + }) + + it("should handle SET_BUCKETS_FILTER", () => { + expect( + reducer(undefined, { + type: actions.SET_FILTER, + filter: "test" + }) + ).toEqual({ + list: [], + filter: "test", + currentBucket: "" + }) + }) + + it("should handle SELECT_BUCKET", () => { + expect( + reducer(undefined, { + type: actions.SET_CURRENT_BUCKET, + bucket: "test" + }) + ).toEqual({ + list: [], + filter: "", + currentBucket: "test" + }) + }) +}) diff --git a/browser/app/js/reducers/alert.js b/browser/app/js/reducers/alert.js new file mode 100644 index 000000000..f60f1e19e --- /dev/null +++ b/browser/app/js/reducers/alert.js @@ -0,0 +1,41 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as actionsAlert from "../actions/alert" + +const initialState = { + show: false, + type: "danger" +} +export default (state = initialState, action) => { + switch (action.type) { + case actionsAlert.SET: + return { + show: true, + id: action.alert.id, + type: action.alert.type, + message: action.alert.message + } + case actionsAlert.CLEAR: + if (action.alert && action.alert.id != state.id) { + return state + } else { + return initialState + } + default: + return state + } +} diff --git a/browser/app/js/reducers/buckets.js b/browser/app/js/reducers/buckets.js new file mode 100644 index 000000000..56a1d6eb1 --- /dev/null +++ b/browser/app/js/reducers/buckets.js @@ -0,0 +1,42 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as actionsBuckets from "../actions/buckets" + +export default ( + state = { list: [], filter: "", currentBucket: "" }, + action +) => { + switch (action.type) { + case actionsBuckets.SET_LIST: + return { + ...state, + list: action.buckets + } + case actionsBuckets.SET_FILTER: + return { + ...state, + filter: action.filter + } + case actionsBuckets.SET_CURRENT_BUCKET: + return { + ...state, + currentBucket: action.bucket + } + default: + return state + } +} diff --git a/browser/app/js/reducers/index.js b/browser/app/js/reducers/index.js new file mode 100644 index 000000000..79145dcac --- /dev/null +++ b/browser/app/js/reducers/index.js @@ -0,0 +1,26 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { combineReducers } from "redux" +import alert from "./alert" +import buckets from "./buckets" + +const rootReducer = combineReducers({ + alert, + buckets +}) + +export default rootReducer diff --git a/browser/app/js/selectors/__tests__/buckets.test.js b/browser/app/js/selectors/__tests__/buckets.test.js new file mode 100644 index 000000000..563860d72 --- /dev/null +++ b/browser/app/js/selectors/__tests__/buckets.test.js @@ -0,0 +1,38 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { getVisibleBuckets, getCurrentBucket } from "../buckets" + +describe("getVisibleBuckets", () => { + let state + beforeEach(() => { + state = { + buckets: { + list: ["test1", "test11", "test2"] + } + } + }) + + it("should return all buckets if no filter specified", () => { + state.buckets.filter = "" + expect(getVisibleBuckets(state)).toEqual(["test1", "test11", "test2"]) + }) + + it("should return all matching buckets if filter is specified", () => { + state.buckets.filter = "test1" + expect(getVisibleBuckets(state)).toEqual(["test1", "test11"]) + }) +}) diff --git a/browser/app/js/selectors/buckets.js b/browser/app/js/selectors/buckets.js new file mode 100644 index 000000000..97cfa12fe --- /dev/null +++ b/browser/app/js/selectors/buckets.js @@ -0,0 +1,28 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createSelector } from "reselect" + +const bucketsSelector = state => state.buckets.list +const bucketsFilterSelector = state => state.buckets.filter + +export const getVisibleBuckets = createSelector( + bucketsSelector, + bucketsFilterSelector, + (buckets, filter) => buckets.filter(bucket => bucket.indexOf(filter) > -1) +) + +export const getCurrentBucket = state => state.buckets.currentBucket diff --git a/browser/app/js/store/configure-store.js b/browser/app/js/store/configure-store.js new file mode 100644 index 000000000..8aa56bd20 --- /dev/null +++ b/browser/app/js/store/configure-store.js @@ -0,0 +1,26 @@ +/* + * Minio Cloud Storage (C) 2018 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createStore, applyMiddleware } from "redux" +import thunkMiddleware from "redux-thunk" +import reducers from "../reducers/index" + +const createStoreWithMiddleware = applyMiddleware(thunkMiddleware)(createStore) + +export default function configureStore(initialState) { + const store = createStoreWithMiddleware(reducers, initialState) + return store +} diff --git a/browser/app/js/web.js b/browser/app/js/web.js index e30351c3b..147cd203e 100644 --- a/browser/app/js/web.js +++ b/browser/app/js/web.js @@ -1,5 +1,5 @@ /* - * Minio Cloud Storage (C) 2016 Minio, Inc. + * Minio Cloud Storage (C) 2016, 2018 Minio, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,17 +14,14 @@ * limitations under the License. */ -import { browserHistory } from 'react-router' import JSONrpc from './jsonrpc' -import * as actions from './actions' import { minioBrowserPrefix } from './constants.js' import Moment from 'moment' import storage from 'local-storage-fallback' -export default class Web { - constructor(endpoint, dispatch) { +class Web { + constructor(endpoint) { const namespace = 'Web' - this.dispatch = dispatch this.JSONrpc = new JSONrpc({ endpoint, namespace @@ -37,7 +34,7 @@ export default class Web { .catch(err => { if (err.status === 401) { storage.removeItem('token') - browserHistory.push(`${minioBrowserPrefix}/login`) + location.reload() throw new Error('Please re-login.') } if (err.status) @@ -128,3 +125,7 @@ export default class Web { return this.makeCall('ListAllBucketPolicies', args) } } + +const web = new Web(`${window.location.protocol}//${window.location.host}${minioBrowserPrefix}/webrpc`); + +export default web; \ No newline at end of file diff --git a/browser/package.json b/browser/package.json index 9ec3ebc39..eae83249b 100644 --- a/browser/package.json +++ b/browser/package.json @@ -3,12 +3,16 @@ "version": "0.0.1", "description": "Minio Browser", "scripts": { - "test": "karma start", + "test": "jest", "dev": "NODE_ENV=dev webpack-dev-server --devtool cheap-module-eval-source-map --progress --colors --hot --content-base dev", "build": "NODE_ENV=dev node build.js", "release": "NODE_ENV=production MINIO_UI_BUILD=RELEASE node build.js", "format": "esformatter -i 'app/**/*.js'" }, + "jest": { + "setupTestFrameworkScriptFile": "./app/js/jest/setup.js", + "testURL": "https://localhost:8080" + }, "repository": { "type": "git", "url": "https://github.com/minio/minio" @@ -23,6 +27,7 @@ "async": "^1.5.2", "babel-cli": "^6.14.0", "babel-core": "^6.14.0", + "babel-jest": "^22.1.0", "babel-loader": "^7.1.2", "babel-plugin-syntax-object-rest-spread": "^6.13.0", "babel-plugin-transform-object-rest-spread": "^6.8.0", @@ -32,20 +37,17 @@ "babel-register": "^6.14.0", "copy-webpack-plugin": "^0.3.3", "css-loader": "^0.23.1", + "enzyme": "^3.3.0", + "enzyme-adapter-react-16": "^1.1.1", "esformatter": "^0.10.0", "esformatter-jsx": "^7.4.1", "esformatter-jsx-ignore": "^1.0.6", "html-webpack-plugin": "^2.30.1", + "jest": "^22.1.4", + "jest-enzyme": "^4.0.2", "json-loader": "^0.5.4", - "karma": "^0.13.22", - "karma-chrome-launcher": "^0.2.3", - "karma-cli": "^0.1.2", - "karma-firefox-launcher": "^0.1.7", - "karma-mocha": "^0.2.2", - "karma-webpack": "^2.0.9", "less": "^2.7.1", "less-loader": "^2.2.3", - "mocha": "^2.5.3", "purifycss-webpack-plugin": "^2.0.3", "style-loader": "^0.13.1", "url-loader": "^0.5.7", @@ -56,28 +58,30 @@ "classnames": "^2.2.3", "expect": "^1.20.2", "font-awesome": "^4.7.0", - "history": "^1.17.0", + "history": "^4.7.2", "humanize": "0.0.9", "json-loader": "^0.5.4", - "local-storage-fallback": "^1.3.0", + "local-storage-fallback": "^4.0.2", "material-design-iconic-font": "^2.2.0", "mime-db": "^1.25.0", "mime-types": "^2.1.13", "moment": "^2.15.1", - "react": "^0.14.8", + "react": "^16.2.0", "react-addons-test-utils": "^0.14.8", - "react-bootstrap": "^0.28.5", - "react-copy-to-clipboard": "^4.2.3", - "react-custom-scrollbars": "^2.2.2", - "react-dom": "^0.14.6", - "react-dropzone": "^3.5.3", + "react-bootstrap": "^0.32.0", + "react-copy-to-clipboard": "^5.0.1", + "react-custom-scrollbars": "^4.2.1", + "react-dom": "^16.2.0", + "react-dropzone": "^4.2.3", "react-infinite-scroller": "^1.0.6", "react-onclickout": "2.0.4", - "react-redux": "^4.4.5", - "react-router": "^2.8.1", - "redux": "^3.6.0", - "redux-thunk": "^1.0.3", - "superagent": "^1.8.4", + "react-redux": "^5.0.6", + "react-router-dom": "^4.2.0", + "redux": "^3.7.2", + "redux-mock-store": "^1.5.1", + "redux-thunk": "^2.2.0", + "reselect": "^3.0.1", + "superagent": "^3.8.2", "superagent-es6-promise": "^1.0.0", "webpack": "^3.10.0" } diff --git a/browser/yarn.lock b/browser/yarn.lock index 0f5c667b0..b1e188fbd 100644 --- a/browser/yarn.lock +++ b/browser/yarn.lock @@ -2,11 +2,27 @@ # yarn lockfile v1 +"@babel/code-frame@^7.0.0-beta.35": + version "7.0.0-beta.38" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.38.tgz#c0af5930617e55e050336838e3a3670983b0b2b2" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@types/node@*": + version "9.4.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.0.tgz#b85a0bcf1e1cc84eb4901b7e96966aedc6f078d1" + +abab@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + abbrev@1: version "1.1.0" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" -accepts@1.3.3, accepts@~1.3.3: +accepts@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" dependencies: @@ -26,6 +42,12 @@ acorn-dynamic-import@^2.0.0: dependencies: acorn "^4.0.3" +acorn-globals@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" + dependencies: + acorn "^5.0.0" + acorn-to-esprima@^2.0.6, acorn-to-esprima@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/acorn-to-esprima/-/acorn-to-esprima-2.0.8.tgz#003f0c642eb92132f417d3708f14ada82adf2eb1" @@ -34,7 +56,7 @@ acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0: +acorn@^5.0.0, acorn@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822" @@ -42,10 +64,6 @@ add-px-to-style@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-px-to-style/-/add-px-to-style-1.0.0.tgz#d0c135441fa8014a8137904531096f67f28f263a" -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - ajv-keywords@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" @@ -57,7 +75,7 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.1.5: +ajv@^5.1.0, ajv@^5.1.5: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -82,6 +100,10 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +ansi-escapes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" + ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -90,10 +112,20 @@ ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + ansi-styles@^2.0.1, ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.1.0, ansi-styles@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + anymatch@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" @@ -108,6 +140,12 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + aproba@^1.0.3: version "1.1.2" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" @@ -147,6 +185,10 @@ arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -166,10 +208,6 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" -array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -188,11 +226,7 @@ array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" -arraybuffer.slice@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" - -arrify@^1.0.0: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -230,28 +264,28 @@ assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" -ast-types@0.9.6: - version "0.9.6" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + async@^1.4.0, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.1.2: +async@^2.1.2, async@^2.1.4: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: lodash "^4.14.0" -async@~0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -283,7 +317,11 @@ aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" -aws4@^1.2.1: +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" @@ -316,6 +354,38 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.0, babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" + slash "^1.0.0" + source-map "^0.5.6" + babel-core@^6.14.0, babel-core@^6.24.1: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729" @@ -340,6 +410,19 @@ babel-core@^6.14.0, babel-core@^6.24.1: slash "^1.0.0" source-map "^0.5.0" +babel-generator@^6.18.0, babel-generator@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.6" + trim-right "^1.0.1" + babel-generator@^6.25.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" @@ -436,6 +519,13 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +babel-jest@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.1.0.tgz#7fae6f655fffe77e818a8c2868c754a42463fdfd" + dependencies: + babel-plugin-istanbul "^4.1.5" + babel-preset-jest "^22.1.0" + babel-loader@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" @@ -456,6 +546,18 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-istanbul@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.5" + test-exclude "^4.1.1" + +babel-plugin-jest-hoist@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.1.0.tgz#c1281dd7887d77a1711dc760468c3b8285dde9ee" + babel-plugin-syntax-flow@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" @@ -734,6 +836,13 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" +babel-preset-jest@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.1.0.tgz#ff4e704102f9642765e2254226050561d8942ec9" + dependencies: + babel-plugin-jest-hoist "^22.1.0" + babel-plugin-syntax-object-rest-spread "^6.13.0" + babel-preset-react@^6.11.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" @@ -757,11 +866,24 @@ babel-register@^6.14.0, babel-register@^6.24.1: mkdirp "^0.5.1" source-map-support "^0.4.2" -babel-runtime@^5.8.25: - version "5.8.38" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-5.8.38.tgz#1c0b02eb63312f5f087ff20450827b425c9d4c19" +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" dependencies: - core-js "^1.0.0" + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.11.6, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" babel-runtime@^6.18.0, babel-runtime@^6.22.0: version "6.23.0" @@ -770,6 +892,16 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" +babel-template@^6.16.0, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + babel-template@^6.24.1, babel-template@^6.25.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" @@ -780,6 +912,20 @@ babel-template@^6.24.1, babel-template@^6.25.0: babylon "^6.17.2" lodash "^4.2.0" +babel-traverse@^6.18.0, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + babel-traverse@^6.24.1, babel-traverse@^6.25.0, babel-traverse@^6.4.5, babel-traverse@^6.9.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" @@ -794,6 +940,15 @@ babel-traverse@^6.24.1, babel-traverse@^6.25.0, babel-traverse@^6.4.5, babel-tra invariant "^2.2.0" lodash "^4.2.0" +babel-types@^6.18.0, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.25.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" @@ -811,9 +966,9 @@ babylon@^6.17.2, babylon@^6.8.0: version "6.17.4" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" balanced-match@^0.4.2: version "0.4.2" @@ -823,22 +978,10 @@ balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" -base62@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/base62/-/base62-1.2.0.tgz#31e7e560dc846c9f44c1a531df6514da35474157" - -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - base64-js@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -855,22 +998,12 @@ batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" -batch@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" - bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" dependencies: tweetnacl "^0.14.3" -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - dependencies: - callsite "1.0.0" - big.js@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" @@ -879,17 +1012,13 @@ binary-extensions@^1.0.0: version "1.8.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" -blob@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" - block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" dependencies: inherits "~2.0.0" -bluebird@^2.10.2, bluebird@^2.9.27: +bluebird@^2.10.2: version "2.11.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" @@ -916,21 +1045,6 @@ body-parser@1.18.2: raw-body "2.3.2" type-is "~1.6.15" -body-parser@^1.12.4: - version "1.17.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.2.tgz#f8892abc8f9e627d42aedafbca66bf5ab99104ee" - dependencies: - bytes "2.4.0" - content-type "~1.0.2" - debug "2.6.7" - depd "~1.1.0" - http-errors "~1.6.1" - iconv-lite "0.4.15" - on-finished "~2.3.0" - qs "6.4.0" - raw-body "~2.2.0" - type-is "~1.6.15" - bonjour@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" @@ -952,6 +1066,18 @@ boom@2.x.x: dependencies: hoek "2.x.x" +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + bootstrap@^3.3.6: version "3.3.7" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.3.7.tgz#5a389394549f23330875a3b150656574f8a9eb71" @@ -963,12 +1089,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^0.1.2: - version "0.1.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" - dependencies: - expand-range "^0.1.0" - braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" @@ -997,6 +1117,16 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +browser-process-hrtime@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" @@ -1056,6 +1186,12 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + buffer-indexof@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" @@ -1084,10 +1220,6 @@ bytes@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070" -bytes@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -1106,9 +1238,9 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" camel-case@3.0.x: version "3.0.0" @@ -1164,6 +1296,10 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +chain-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" + chalk@^1.1.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1174,7 +1310,26 @@ chalk@^1.1.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chokidar@^1.4.1, chokidar@^1.6.1, chokidar@^1.7.0: +chalk@^2.0.0, chalk@^2.0.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.2" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash "^4.15.0" + parse5 "^3.0.1" + +chokidar@^1.6.1, chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: @@ -1206,6 +1361,10 @@ chokidar@^2.0.0: optionalDependencies: fsevents "^1.0.0" +ci-info@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -1213,6 +1372,10 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +circular-json-es6@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/circular-json-es6/-/circular-json-es6-2.0.2.tgz#e4f4a093e49fb4b6aba1157365746112a78bd344" + clap@^1.0.9: version "1.2.0" resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.0.tgz#59c90fe3e137104746ff19469a27a634ff68c857" @@ -1228,7 +1391,7 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@^2.1.5, classnames@^2.2.3, classnames@^2.2.5: +classnames@^2.2.3, classnames@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" @@ -1254,6 +1417,14 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +cliui@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + clone@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" @@ -1285,6 +1456,12 @@ color-convert@^1.3.0: dependencies: color-name "^1.1.1" +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + color-name@^1.0.0, color-name@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" @@ -1311,7 +1488,11 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@^1.1.0, colors@~1.1.2: +colors@0.5.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" + +colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -1321,21 +1502,13 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" - -commander@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" - commander@2.9.x, commander@~2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: graceful-readlink ">= 1.0.0" -commander@^2.2.0, commander@^2.5.0, commander@^2.8.1, commander@^2.9.0: +commander@^2.2.0, commander@^2.8.1, commander@^2.9.0: version "2.10.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.10.0.tgz#e1f5d3245de246d1a5ca04702fa1ad1bd7e405fe" dependencies: @@ -1345,36 +1518,10 @@ commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" -commoner@^0.10.1: - version "0.10.8" - resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" - dependencies: - commander "^2.5.0" - detective "^4.3.1" - glob "^5.0.15" - graceful-fs "^4.1.2" - iconv-lite "^0.4.5" - mkdirp "^0.5.0" - private "^0.1.6" - q "^1.1.2" - recast "^0.11.17" - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - -component-emitter@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" - -component-emitter@1.2.1, component-emitter@^1.2.1, component-emitter@~1.2.0: +component-emitter@^1.2.0, component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - compressible@~2.0.8: version "2.0.10" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.10.tgz#feda1c7f7617912732b29bf8cf26252a20b9eecd" @@ -1407,15 +1554,6 @@ connect-history-api-fallback@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169" -connect@^3.3.5: - version "3.6.2" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.2.tgz#694e8d20681bfe490282c8ab886be98f09f42fe7" - dependencies: - debug "2.6.7" - finalhandler "1.0.3" - parseurl "~1.3.1" - utils-merge "1.0.0" - console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -1434,9 +1572,9 @@ content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" -content-type@~1.0.2: +content-type-parser@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" content-type@~1.0.4: version "1.0.4" @@ -1450,6 +1588,10 @@ convert-source-map@^1.1.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" +convert-source-map@^1.4.0, convert-source-map@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -1458,9 +1600,9 @@ cookie@0.3.1, cookie@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" -cookiejar@2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.0.6.tgz#0abf356ad00d1c5a219d88d44518046dd026acfe" +cookiejar@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.1.tgz#41ad57b1b555951ec171412a81942b1e8200d34a" copy-descriptor@^0.1.0: version "0.1.1" @@ -1485,10 +1627,14 @@ core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" -core-js@^2.1.0, core-js@^2.4.0: +core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" +core-js@^2.5.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" + core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1520,14 +1666,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-react-class@^15.5.1, create-react-class@^15.5.2: - version "15.6.0" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4" - dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - object-assign "^4.1.1" - cross-spawn@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" @@ -1541,6 +1679,12 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -1577,7 +1721,7 @@ css-loader@^0.23.1: postcss-modules-values "^1.1.0" source-list-map "^0.1.4" -css-select@^1.1.0: +css-select@^1.1.0, css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" dependencies: @@ -1662,16 +1806,22 @@ csso@~2.3.1: clap "^1.0.9" source-map "^0.5.3" +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" dependencies: array-find-index "^1.0.1" -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" @@ -1688,30 +1838,12 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -debug@2, debug@2.6.8, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.6.6: +debug@2.6.8, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.6.6: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: ms "2.0.0" -debug@2.2.0, debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - dependencies: - ms "0.7.1" - -debug@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" - dependencies: - ms "0.7.2" - -debug@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" - dependencies: - ms "2.0.0" - debug@2.6.9, debug@^2.3.3, debug@^2.6.8: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -1728,6 +1860,12 @@ debug@^3.1.0: dependencies: ms "2.0.0" +debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1736,7 +1874,13 @@ decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" -deep-equal@^1.0.0, deep-equal@^1.0.1: +deep-equal-ident@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal-ident/-/deep-equal-ident-1.1.1.tgz#06f4b89e53710cd6cea4a7781c7a956642de8dc9" + dependencies: + lodash.isequal "^3.0" + +deep-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -1744,6 +1888,16 @@ deep-extend@~0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + define-properties@^1.1.2, define-properties@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" @@ -1786,7 +1940,7 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@1.1.0, depd@~1.1.0: +depd@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" @@ -1815,25 +1969,26 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + detect-node@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" -detective@^4.3.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1" - dependencies: - acorn "^4.0.3" - defined "^1.0.0" - -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - -diff@1.4.0, diff@^1.3.2: +diff@^1.3.2: version "1.4.0" resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" +diff@^3.2.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" + diffie-hellman@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" @@ -1842,6 +1997,10 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + disparity@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/disparity/-/disparity-2.0.0.tgz#57ddacb47324ae5f58d2cc0da886db4ce9eeb718" @@ -1880,24 +2039,15 @@ dom-css@^2.0.0: prefix-style "2.0.1" to-camel-case "1.0.0" -dom-helpers@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-2.4.0.tgz#9bb4b245f637367b1fa670274272aa28fe06c367" - dom-helpers@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.2.1.tgz#3203e07fed217bd1f424b019735582fc37b2825a" -dom-serialize@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" +dom-helpers@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" -dom-serializer@0: +dom-serializer@0, dom-serializer@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" dependencies: @@ -1908,7 +2058,7 @@ domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" -domelementtype@1: +domelementtype@1, domelementtype@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" @@ -1916,12 +2066,24 @@ domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" +domexception@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + dependencies: + webidl-conversions "^4.0.2" + domhandler@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" dependencies: domelementtype "1" +domhandler@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + domutils@1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" @@ -1935,6 +2097,13 @@ domutils@1.5.1: dom-serializer "0" domelementtype "1" +domutils@^1.5.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" + dependencies: + dom-serializer "0" + domelementtype "1" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -1984,45 +2153,6 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -engine.io-client@~1.8.4: - version "1.8.4" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.4.tgz#9fe85dee25853ca6babe25bd2ad68710863e91c2" - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "2.3.3" - engine.io-parser "1.3.2" - has-cors "1.1.0" - indexof "0.0.1" - parsejson "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - ws "1.1.2" - xmlhttprequest-ssl "1.5.3" - yeast "0.1.2" - -engine.io-parser@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a" - dependencies: - after "0.8.2" - arraybuffer.slice "0.0.6" - base64-arraybuffer "0.1.5" - blob "0.0.4" - has-binary "0.1.7" - wtf-8 "1.0.0" - -engine.io@~1.8.4: - version "1.8.4" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.4.tgz#77bce12b80e5d60429337fec3b0daf691ebc9003" - dependencies: - accepts "1.3.3" - base64id "1.0.0" - cookie "0.3.1" - debug "2.3.3" - engine.io-parser "1.3.2" - ws "1.1.4" - enhanced-resolve@^3.4.0: version "3.4.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" @@ -2032,20 +2162,63 @@ enhanced-resolve@^3.4.0: object-assign "^4.0.1" tapable "^0.2.7" -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - -entities@~1.1.1: +entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" -envify@^3.0.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" +enzyme-adapter-react-16@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz#a8f4278b47e082fbca14f5bfb1ee50ee650717b4" dependencies: - jstransform "^11.0.3" - through "~2.3.4" + enzyme-adapter-utils "^1.3.0" + lodash "^4.17.4" + object.assign "^4.0.4" + object.values "^1.0.4" + prop-types "^15.6.0" + react-reconciler "^0.7.0" + react-test-renderer "^16.0.0-0" + +enzyme-adapter-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz#d6c85756826c257a8544d362cc7a67e97ea698c7" + dependencies: + lodash "^4.17.4" + object.assign "^4.0.4" + prop-types "^15.6.0" + +enzyme-matchers@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/enzyme-matchers/-/enzyme-matchers-4.0.2.tgz#3f4457d0d0da3e268af4bee9f222439dfca26214" + dependencies: + circular-json-es6 "^2.0.1" + deep-equal-ident "^1.1.1" + +enzyme-to-json@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.3.1.tgz#64239dcd417e2fb552f4baa6632de4744b9b5b93" + dependencies: + lodash "^4.17.4" + +enzyme@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.3.0.tgz#0971abd167f2d4bf3f5bd508229e1c4b6dc50479" + dependencies: + cheerio "^1.0.0-rc.2" + function.prototype.name "^1.0.3" + has "^1.0.1" + is-boolean-object "^1.0.0" + is-callable "^1.1.3" + is-number-object "^1.0.3" + is-string "^1.0.4" + is-subset "^0.1.1" + lodash "^4.17.4" + object-inspect "^1.5.0" + object-is "^1.0.1" + object.assign "^4.1.0" + object.entries "^1.0.4" + object.values "^1.0.4" + raf "^3.4.0" + rst-selector-parser "^2.2.3" errno@^0.1.1, errno@^0.1.3: version "0.1.4" @@ -2059,16 +2232,7 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.0" - is-callable "^1.1.3" - is-regex "^1.0.3" - -es-abstract@^1.7.0: +es-abstract@^1.5.1, es-abstract@^1.7.0: version "1.10.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" dependencies: @@ -2078,6 +2242,15 @@ es-abstract@^1.7.0: is-callable "^1.1.3" is-regex "^1.0.4" +es-abstract@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.0" + is-callable "^1.1.3" + is-regex "^1.0.3" + es-to-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" @@ -2142,10 +2315,25 @@ escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@1.0.2, escape-string-regexp@^1.0.2: +escape-string-regexp@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.5.6" + escope@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" @@ -2214,18 +2402,18 @@ esprima-fb@^12001.1.0-dev-harmony-fb: version "12001.1.0-dev-harmony-fb" resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-12001.1.0-dev-harmony-fb.tgz#d84400384ba95ce2678c617ad24a7f40808da915" -esprima-fb@^15001.1.0-dev-harmony-fb: - version "15001.1.0-dev-harmony-fb" - resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" - esprima@^2.0.0, esprima@^2.1, esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -esprima@~3.1.0: +esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + esrecurse@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" @@ -2233,7 +2421,7 @@ esrecurse@^4.1.0: estraverse "^4.1.0" object-assign "^4.0.1" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -2273,6 +2461,12 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +exec-sh@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" + dependencies: + merge "^1.1.3" + execa@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/execa/-/execa-0.5.1.tgz#de3fb85cb8d6e91c85bcbceb164581785cb57b36" @@ -2285,13 +2479,9 @@ execa@^0.5.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -expand-braces@^0.1.1: +exit@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" - dependencies: - array-slice "^0.2.3" - array-unique "^0.2.1" - braces "^0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" expand-brackets@^0.1.4: version "0.1.5" @@ -2311,13 +2501,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-range@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" - dependencies: - is-number "^0.1.1" - repeat-string "^0.2.2" - expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" @@ -2336,6 +2519,17 @@ expect@^1.20.2: object-keys "^1.0.9" tmatch "^2.0.1" +expect@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.1.0.tgz#f8f9b019ab275d859cbefed531fbaefe8972431d" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^22.1.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^22.1.0" + jest-message-util "^22.1.0" + jest-regex-util "^22.1.0" + express@^4.16.2: version "4.16.2" resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" @@ -2388,6 +2582,10 @@ extend@3.0.0, extend@^3.0.0, extend@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" +extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -2419,6 +2617,10 @@ fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" @@ -2435,15 +2637,23 @@ faye-websocket@~0.11.0: dependencies: websocket-driver ">=0.5.1" -fbjs@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.6.1.tgz#9636b7705f5ba9684d44b72f78321254afc860f7" +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + +fbjs@^0.8.16: + version "0.8.16" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" dependencies: core-js "^1.0.0" + isomorphic-fetch "^2.1.1" loose-envify "^1.0.0" - promise "^7.0.3" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" ua-parser-js "^0.7.9" - whatwg-fetch "^0.9.0" fbjs@^0.8.9: version "0.8.12" @@ -2461,6 +2671,13 @@ filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" @@ -2480,18 +2697,6 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89" - dependencies: - debug "2.6.7" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.1" - statuses "~1.3.1" - unpipe "~1.0.0" - finalhandler@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" @@ -2551,13 +2756,13 @@ forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@1.0.0-rc3: - version "1.0.0-rc3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.0-rc3.tgz#d35bc62e7fbc2937ae78f948aaa0d38d90607577" +form-data@^2.3.1, form-data@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" dependencies: - async "^1.4.0" + asynckit "^0.4.0" combined-stream "^1.0.5" - mime-types "^2.1.3" + mime-types "^2.1.12" form-data@~2.1.1: version "2.1.4" @@ -2567,9 +2772,9 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" -formidable@~1.0.14: - version "1.0.17" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" +formidable@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9" forwarded@~0.1.2: version "0.1.2" @@ -2591,12 +2796,6 @@ fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" -fs-access@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" - dependencies: - null-check "^1.0.0" - fs-readdir-recursive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" @@ -2612,6 +2811,13 @@ fsevents@^1.0.0: nan "^2.3.0" node-pre-gyp "^0.6.36" +fsevents@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.39" + fstream-ignore@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" @@ -2637,6 +2843,14 @@ function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" +function.prototype.name@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + is-callable "^1.1.3" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -2695,13 +2909,6 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@3.2.11: - version "3.2.11" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" - dependencies: - inherits "2" - minimatch "0.3" - glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -2712,7 +2919,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -2723,7 +2930,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^9.0.0: +globals@^9.0.0, globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -2737,7 +2944,7 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -2745,18 +2952,32 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.4: version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" -growl@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" handle-thing@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" +handlebars@^4.0.3: + version "4.0.11" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" @@ -2764,22 +2985,19 @@ har-validator@~4.2.1: ajv "^4.9.1" har-schema "^1.0.5" +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" dependencies: ansi-regex "^2.0.0" -has-binary@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c" - dependencies: - isarray "0.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" @@ -2788,6 +3006,10 @@ has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -2845,7 +3067,7 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.0" -hawk@~3.1.3: +hawk@3.1.3, hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: @@ -2854,27 +3076,28 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + he@1.1.x: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" -history@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/history/-/history-1.17.0.tgz#c5483caa5a1d1fea00a1a7d8d19b874016711d29" +history@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b" dependencies: - deep-equal "^1.0.0" - invariant "^2.0.0" - query-string "^3.0.0" - warning "^2.0.0" - -history@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/history/-/history-2.1.2.tgz#4aa2de897a0e4867e4539843be6ecdb2986bfdec" - dependencies: - deep-equal "^1.0.0" - invariant "^2.0.0" - query-string "^3.0.0" - warning "^2.0.0" + invariant "^2.2.1" + loose-envify "^1.2.0" + resolve-pathname "^2.2.0" + value-equal "^0.4.0" + warning "^3.0.0" hmac-drbg@^1.0.0: version "1.0.1" @@ -2888,9 +3111,13 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" -hoist-non-react-statics@^1.0.3, hoist-non-react-statics@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" +hoek@4.x.x: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + +hoist-non-react-statics@^2.2.1, hoist-non-react-statics@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0" home-or-tmp@^2.0.0: version "2.0.0" @@ -2916,6 +3143,12 @@ html-comment-regex@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + dependencies: + whatwg-encoding "^1.0.1" + html-entities@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" @@ -2944,6 +3177,17 @@ html-webpack-plugin@^2.30.1: pretty-error "^2.0.2" toposort "^1.0.0" +htmlparser2@^3.9.1: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + htmlparser2@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" @@ -2984,7 +3228,7 @@ http-proxy-middleware@~0.17.4: lodash "^4.17.2" micromatch "^2.3.11" -http-proxy@^1.13.0, http-proxy@^1.16.2: +http-proxy@^1.16.2: version "1.16.2" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" dependencies: @@ -2999,6 +3243,14 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" @@ -3007,14 +3259,14 @@ humanize@0.0.9: version "0.0.9" resolved "https://registry.yarnpkg.com/humanize/-/humanize-0.0.9.tgz#1994ffaecdfe9c441ed2bdac7452b7bb4c9e41a4" -iconv-lite@0.4.15, iconv-lite@^0.4.5, iconv-lite@~0.4.13: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" - iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +iconv-lite@~0.4.13: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -3034,6 +3286,10 @@ import-local@^1.0.0: pkg-dir "^2.0.0" resolve-cwd "^2.0.0" +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" @@ -3077,7 +3333,7 @@ interpret@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" -invariant@^2.0.0, invariant@^2.1.0, invariant@^2.1.2, invariant@^2.2.0, invariant@^2.2.1: +invariant@^2.0.0, invariant@^2.1.0, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: @@ -3145,6 +3401,12 @@ is-callable@^1.0.4, is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" +is-ci@^1.0.10: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" + dependencies: + ci-info "^1.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -3237,6 +3499,10 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + is-generator-function@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.6.tgz#9e71653cd15fff341c79c4151460a131d31e9fc4" @@ -3263,10 +3529,6 @@ is-number-object@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" -is-number@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" - is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -3333,6 +3595,10 @@ is-string@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" +is-subset@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + is-svg@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" @@ -3363,10 +3629,6 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -isbinaryfile@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -3392,12 +3654,325 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -jade@0.26.3: - version "0.26.3" - resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" +istanbul-api@^1.1.14: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620" dependencies: - commander "0.6.1" - mkdirp "0.3.0" + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.1.0" + istanbul-lib-instrument "^1.9.1" + istanbul-lib-report "^1.1.2" + istanbul-lib-source-maps "^1.2.2" + istanbul-reports "^1.1.3" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" + +istanbul-lib-hook@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.1.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425" + dependencies: + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10" + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.1.4.tgz#1f7844bcb739dec07e5899a633c0cb6d5069834e" + dependencies: + throat "^4.0.0" + +jest-cli@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.1.4.tgz#0fe9f3ac881b0cdc00227114c58583a2ebefcc04" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.1.14" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-instrument "^1.8.0" + istanbul-lib-source-maps "^1.2.1" + jest-changed-files "^22.1.4" + jest-config "^22.1.4" + jest-environment-jsdom "^22.1.4" + jest-get-type "^22.1.0" + jest-haste-map "^22.1.0" + jest-message-util "^22.1.0" + jest-regex-util "^22.1.0" + jest-resolve-dependencies "^22.1.0" + jest-runner "^22.1.4" + jest-runtime "^22.1.4" + jest-snapshot "^22.1.2" + jest-util "^22.1.4" + jest-worker "^22.1.0" + micromatch "^2.3.11" + node-notifier "^5.1.2" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^10.0.3" + +jest-config@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.1.4.tgz#075ffacce83c3e38cf85b1b9ba0d21bd3ee27ad0" + dependencies: + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^22.1.4" + jest-environment-node "^22.1.4" + jest-get-type "^22.1.0" + jest-jasmine2 "^22.1.4" + jest-regex-util "^22.1.0" + jest-resolve "^22.1.4" + jest-util "^22.1.4" + jest-validate "^22.1.2" + pretty-format "^22.1.0" + +jest-diff@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.1.0.tgz#0fad9d96c87b453896bf939df3dc8aac6919ac38" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.1.0" + pretty-format "^22.1.0" + +jest-docblock@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.1.0.tgz#3fe5986d5444cbcb149746eb4b07c57c5a464dfd" + dependencies: + detect-newline "^2.1.0" + +jest-environment-jsdom@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.1.4.tgz#704518ce8375f7ec5de048d1e9c4268b08a03e00" + dependencies: + jest-mock "^22.1.0" + jest-util "^22.1.4" + jsdom "^11.5.1" + +jest-environment-node@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.1.4.tgz#0f2946e8f8686ce6c5d8fa280ce1cd8d58e869eb" + dependencies: + jest-mock "^22.1.0" + jest-util "^22.1.4" + +jest-enzyme@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/jest-enzyme/-/jest-enzyme-4.0.2.tgz#c3a87f311889819d51ae2639c9da412da07cfc4a" + dependencies: + enzyme-matchers "^4.0.2" + enzyme-to-json "^3.3.0" + +jest-get-type@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9" + +jest-haste-map@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.1.0.tgz#1174c6ff393f9818ebf1163710d8868b5370da2a" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^22.1.0" + jest-worker "^22.1.0" + micromatch "^2.3.11" + sane "^2.0.0" + +jest-jasmine2@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.1.4.tgz#cada0baf50a220c616a9575728b80d4ddedebe8b" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^22.1.0" + graceful-fs "^4.1.11" + is-generator-fn "^1.0.0" + jest-diff "^22.1.0" + jest-matcher-utils "^22.1.0" + jest-message-util "^22.1.0" + jest-snapshot "^22.1.2" + source-map-support "^0.5.0" + +jest-leak-detector@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.1.0.tgz#08376644cee07103da069baac19adb0299b772c2" + dependencies: + pretty-format "^22.1.0" + +jest-matcher-utils@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.1.0.tgz#e164665b5d313636ac29f7f6fe9ef0a6ce04febc" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^22.1.0" + +jest-message-util@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.1.0.tgz#51ba0794cb6e579bfc4e9adfac452f9f1a0293fc" + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + +jest-mock@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.1.0.tgz#87ec21c0599325671c9a23ad0e05c86fb5879b61" + +jest-regex-util@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.1.0.tgz#5daf2fe270074b6da63e5d85f1c9acc866768f53" + +jest-resolve-dependencies@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.1.0.tgz#340e4139fb13315cd43abc054e6c06136be51e31" + dependencies: + jest-regex-util "^22.1.0" + +jest-resolve@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.1.4.tgz#72b9b371eaac48f84aad4ad732222ffe37692602" + dependencies: + browser-resolve "^1.11.2" + chalk "^2.0.1" + +jest-runner@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.1.4.tgz#e039039110cb1b31febc0f99e349bf7c94304a2f" + dependencies: + exit "^0.1.2" + jest-config "^22.1.4" + jest-docblock "^22.1.0" + jest-haste-map "^22.1.0" + jest-jasmine2 "^22.1.4" + jest-leak-detector "^22.1.0" + jest-message-util "^22.1.0" + jest-runtime "^22.1.4" + jest-util "^22.1.4" + jest-worker "^22.1.0" + throat "^4.0.0" + +jest-runtime@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.1.4.tgz#1474d9f5cda518b702e0b25a17d4ef3fc563a20c" + dependencies: + babel-core "^6.0.0" + babel-jest "^22.1.0" + babel-plugin-istanbul "^4.1.5" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^22.1.4" + jest-haste-map "^22.1.0" + jest-regex-util "^22.1.0" + jest-resolve "^22.1.4" + jest-util "^22.1.4" + 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.1.0" + yargs "^10.0.3" + +jest-snapshot@^22.1.2: + version "22.1.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.1.2.tgz#b270cf6e3098f33aceeafda02b13eb0933dc6139" + dependencies: + chalk "^2.0.1" + jest-diff "^22.1.0" + jest-matcher-utils "^22.1.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^22.1.0" + +jest-util@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.1.4.tgz#ac8cbd43ee654102f1941f3f0e9d1d789a8b6a9b" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^22.1.0" + jest-validate "^22.1.2" + mkdirp "^0.5.1" + +jest-validate@^22.1.2: + version "22.1.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.1.2.tgz#c3b06bcba7bd9a850919fe336b5f2a8c3a239404" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^22.1.0" + +jest-worker@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.1.0.tgz#0987832fe58fbdc205357f4c19b992446368cafb" + dependencies: + merge-stream "^1.0.1" + +jest@^22.1.4: + version "22.1.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-22.1.4.tgz#9ec71373a38f40ff92a3e5e96ae85687c181bb72" + dependencies: + jest-cli "^22.1.4" js-base64@^2.1.9: version "2.1.9" @@ -3416,6 +3991,17 @@ js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@^3.7.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" @@ -3427,6 +4013,37 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jsdom@^11.5.1: + version "11.6.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.1.tgz#43fffc10072597a8ee9680cba46900d9e4dbeba2" + dependencies: + abab "^1.0.4" + acorn "^5.3.0" + 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 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + domexception "^1.0.0" + escodegen "^1.9.0" + html-encoding-sniffer "^1.0.2" + left-pad "^1.2.0" + nwmatcher "^1.4.3" + parse5 "^4.0.0" + pn "^1.1.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" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-url "^6.4.0" + ws "^4.0.0" + xml-name-validator "^3.0.0" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -3457,7 +4074,7 @@ json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -json3@3.3.2, json3@^3.3.2: +json3@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" @@ -3478,76 +4095,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" -jstransform@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" - dependencies: - base62 "^1.1.0" - commoner "^0.10.1" - esprima-fb "^15001.1.0-dev-harmony-fb" - object-assign "^2.0.0" - source-map "^0.4.2" - -karma-chrome-launcher@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-0.2.3.tgz#4c6d700d163a9d34c618efd87918be49e7a4a8c9" - dependencies: - fs-access "^1.0.0" - which "^1.2.1" - -karma-cli@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/karma-cli/-/karma-cli-0.1.2.tgz#cacea84371ece19876265c8fa102ebbb9fee4a8c" - dependencies: - resolve "^1.1.6" - -karma-firefox-launcher@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-0.1.7.tgz#c05dd86533691e62f31952595098e8bd357d39f3" - -karma-mocha@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-0.2.2.tgz#388ed917da15dcb196d1b915c1934ef803193f8e" - -karma-webpack@^2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.9.tgz#61c88091f7dd910635134c032b266a465affb57f" - dependencies: - async "~0.9.0" - loader-utils "^0.2.5" - lodash "^3.8.0" - source-map "^0.5.6" - webpack-dev-middleware "^1.12.0" - -karma@^0.13.22: - version "0.13.22" - resolved "https://registry.yarnpkg.com/karma/-/karma-0.13.22.tgz#07750b1bd063d7e7e7b91bcd2e6354d8f2aa8744" - dependencies: - batch "^0.5.3" - bluebird "^2.9.27" - body-parser "^1.12.4" - chokidar "^1.4.1" - colors "^1.1.0" - connect "^3.3.5" - core-js "^2.1.0" - di "^0.0.1" - dom-serialize "^2.2.0" - expand-braces "^0.1.1" - glob "^7.0.0" - graceful-fs "^4.1.2" - http-proxy "^1.13.0" - isbinaryfile "^3.0.0" - lodash "^3.8.0" - log4js "^0.6.31" - mime "^1.3.4" - minimatch "^3.0.0" - optimist "^0.6.1" - rimraf "^2.3.3" - socket.io "^1.4.5" - source-map "^0.5.3" - useragent "^2.1.6" - -keycode@^2.1.0: +keycode@^2.1.2: version "2.1.9" resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa" @@ -3591,6 +4139,10 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +left-pad@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" + less-loader@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-2.2.3.tgz#b6d8f8139c8493df09d992a93a00734b08f84528" @@ -3610,6 +4162,17 @@ less@^2.7.1: request "^2.72.0" source-map "^0.5.3" +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -3650,9 +4213,9 @@ loader-utils@^1.0.2, loader-utils@^1.1.0: emojis-list "^2.0.0" json5 "^0.5.0" -local-storage-fallback@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/local-storage-fallback/-/local-storage-fallback-1.4.0.tgz#2cb71823abbaa982a0460708d9d392671d3c3f6d" +local-storage-fallback@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/local-storage-fallback/-/local-storage-fallback-4.0.2.tgz#b5152517442a4f35996219bc197cf41369276895" dependencies: cookie "^0.3.1" @@ -3663,14 +4226,22 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash-compat@^3.10.1: - version "3.10.2" - resolved "https://registry.yarnpkg.com/lodash-compat/-/lodash-compat-3.10.2.tgz#c6940128a9d30f8e902cd2cf99fd0cba4ecfc183" - -lodash-es@^4.2.1: +lodash-es@^4.2.0, lodash-es@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" +lodash._baseisequal@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz#d8025f76339d29342767dcc887ce5cb95a5b51f1" + dependencies: + lodash.isarray "^3.0.0" + lodash.istypedarray "^3.0.0" + lodash.keys "^3.0.0" + +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + lodash._createcompounder@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz#5dd2cb55372d6e70e0e2392fb2304d6631091075" @@ -3678,6 +4249,10 @@ lodash._createcompounder@^3.0.0: lodash.deburr "^3.0.0" lodash.words "^3.0.0" +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + lodash._root@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" @@ -3694,10 +4269,49 @@ lodash.deburr@^3.0.0: dependencies: lodash._root "^3.0.0" +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.isequal@^3.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-3.0.4.tgz#1c35eb3b6ef0cd1ff51743e3ea3cf7fdffdacb64" + dependencies: + lodash._baseisequal "^3.0.0" + lodash._bindcallback "^3.0.0" + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + +lodash.istypedarray@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -3708,21 +4322,14 @@ lodash.words@^3.0.0: dependencies: lodash._root "^3.0.0" -lodash@^3.10.1, lodash@^3.8.0: +lodash@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.2.0, lodash@^4.2.1: +lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -log4js@^0.6.31: - version "0.6.38" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" - dependencies: - readable-stream "~1.0.2" - semver "~4.3.3" - loglevel@^1.4.1: version "1.6.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" @@ -3748,14 +4355,6 @@ lower-case@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" -lru-cache@2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" - -lru-cache@2.2.x: - version "2.2.4" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" - lru-cache@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" @@ -3779,6 +4378,12 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -3844,7 +4449,17 @@ merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" -methods@~1.1.1, methods@~1.1.2: +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + dependencies: + readable-stream "^2.0.1" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +methods@^1.1.1, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -3903,23 +4518,19 @@ mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" -mime-types@^2.1.12, mime-types@^2.1.13, mime-types@^2.1.3, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: +mime-types@^2.1.12, mime-types@^2.1.13, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: version "2.1.15" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" dependencies: mime-db "~1.27.0" -mime-types@~2.1.16: +mime-types@~2.1.16, mime-types@~2.1.17: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: mime-db "~1.30.0" -mime@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" - -mime@1.3.x, mime@^1.2.11, mime@^1.3.4: +mime@1.3.x, mime@^1.2.11: version "1.3.6" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" @@ -3927,7 +4538,7 @@ mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" -mime@^1.5.0: +mime@^1.4.1, mime@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -3943,14 +4554,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -minimatch@0.3: - version "0.3.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" - dependencies: - lru-cache "2" - sigmund "~1.0.0" - -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -3971,31 +4575,12 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" - -mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" -mocha@^2.5.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58" - dependencies: - commander "2.3.0" - debug "2.2.0" - diff "1.4.0" - escape-string-regexp "1.0.2" - glob "3.2.11" - growl "1.9.2" - jade "0.26.3" - mkdirp "0.5.1" - supports-color "1.2.0" - to-iso-string "0.0.2" - moment@^2.15.1: version "2.18.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" @@ -4012,10 +4597,6 @@ ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" -ms@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4051,12 +4632,24 @@ nanomatch@^1.2.5: snapdragon "^0.8.1" to-regex "^3.0.1" +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + ncname@1.0.x: version "1.0.0" resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c" dependencies: xml-char-classes "^1.0.0" +nearley@^2.7.10: + version "2.11.0" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.0.tgz#5e626c79a6cd2f6ab9e7e5d5805e7668967757ae" + dependencies: + nomnom "~1.6.2" + railroad-diagrams "^1.0.0" + randexp "^0.4.2" + negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" @@ -4084,6 +4677,10 @@ node-forge@0.6.33: version "0.6.33" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + node-libs-browser@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" @@ -4112,6 +4709,15 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" +node-notifier@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" + dependencies: + growly "^1.3.0" + semver "^5.4.1" + shellwords "^0.1.1" + which "^1.3.0" + node-pre-gyp@^0.6.36: version "0.6.36" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" @@ -4126,6 +4732,29 @@ node-pre-gyp@^0.6.36: tar "^2.2.1" tar-pack "^3.4.0" +node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +nomnom@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" + dependencies: + colors "0.5.x" + underscore "~1.4.4" + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -4221,10 +4850,6 @@ nth-check@~1.0.1: dependencies: boolbase "~1.0.0" -null-check@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" - num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -4233,26 +4858,18 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -oauth-sign@~0.8.1: +nwmatcher@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" + +oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" -object-assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" - -object-assign@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" - object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" @@ -4265,7 +4882,15 @@ object-inspect@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.2.2.tgz#c82115e4fcc888aea14d64c22e4f17f6a70d5e5a" -object-keys@^1.0.8, object-keys@^1.0.9: +object-inspect@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.5.0.tgz#9d876c11e40f485c79215670281b767488f9bfe3" + +object-is@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" + +object-keys@^1.0.11, object-keys@^1.0.8, object-keys@^1.0.9: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" @@ -4275,6 +4900,15 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" +object.assign@^4.0.4, object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + object.entries@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" @@ -4284,6 +4918,13 @@ object.entries@^1.0.4: function-bind "^1.1.0" has "^1.0.1" +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -4297,6 +4938,15 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + obuf@^1.0.0, obuf@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" @@ -4311,7 +4961,7 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@^1.3.0, once@^1.3.3: +once@^1.3.0, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -4330,9 +4980,16 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -options@>=0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" original@>=0.0.5: version "1.0.0" @@ -4362,7 +5019,7 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -4434,23 +5091,15 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parsejson@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab" +parse5@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" dependencies: - better-assert "~1.0.0" + "@types/node" "*" -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - dependencies: - better-assert "~1.0.0" +parse5@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" parseurl@~1.3.1: version "1.3.1" @@ -4482,7 +5131,7 @@ path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" -path-is-absolute@^1.0.0: +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -4502,6 +5151,12 @@ path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" +path-to-regexp@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + dependencies: + isarray "0.0.1" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -4558,6 +5213,10 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + portfinder@^1.0.9: version "1.0.13" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" @@ -4820,6 +5479,10 @@ prefix-style@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/prefix-style/-/prefix-style-2.0.1.tgz#66bba9a870cfda308a5dc20e85e9120932c95a06" +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" @@ -4835,10 +5498,21 @@ pretty-error@^2.0.2: renderkid "^2.0.1" utila "~0.4" -private@^0.1.6, private@~0.1.5: +pretty-format@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.1.0.tgz#2277605b40ed4529ae4db51ff62f4be817647914" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +private@^0.1.6: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" +private@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" @@ -4847,12 +5521,26 @@ process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" -promise@^7.0.3, promise@^7.1.1: +promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" dependencies: asap "~2.0.3" +prop-types-extra@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.0.1.tgz#a57bd4810e82d27a3ff4317ecc1b4ad005f79a82" + dependencies: + warning "^3.0.0" + +prop-types@^15.5.10, prop-types@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.3.1" + object-assign "^4.1.1" + prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8: version "15.5.10" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" @@ -4901,6 +5589,10 @@ punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +punycode@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + purify-css@^1.1.1: version "1.2.6" resolved "https://registry.yarnpkg.com/purify-css/-/purify-css-1.2.6.tgz#56c2b58e4e1134247c6fdc20ba443b51b45e8b2f" @@ -4923,23 +5615,13 @@ q@^1.1.2: version "1.5.0" resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" -qs@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404" - -qs@6.4.0, qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - -qs@6.5.1: +qs@6.5.1, qs@^6.5.1, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" -query-string@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-3.0.3.tgz#ae2e14b4d05071d4e9b9eb4873c35b0dcd42e638" - dependencies: - strict-uri-encode "^1.0.0" +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" query-string@^4.1.0: version "4.3.4" @@ -4970,6 +5652,23 @@ raf@^3.1.0: dependencies: performance-now "^2.1.0" +raf@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" + dependencies: + performance-now "^2.1.0" + +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + +randexp@^0.4.2: + version "0.4.6" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" @@ -5003,14 +5702,6 @@ raw-body@2.3.2: iconv-lite "0.4.19" unpipe "1.0.0" -raw-body@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" - dependencies: - bytes "2.4.0" - iconv-lite "0.4.15" - unpipe "1.0.0" - rc@^1.1.7: version "1.2.1" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" @@ -5024,43 +5715,50 @@ react-addons-test-utils@^0.14.8: version "0.14.8" resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-0.14.8.tgz#dcddc039e71fc3c81d80338e53a3714f14d41e1f" -react-bootstrap@^0.28.5: - version "0.28.5" - resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-0.28.5.tgz#393ab59ad66071a6a7bae0fda7518cdd228f2baf" +react-bootstrap@^0.32.0: + version "0.32.1" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-0.32.1.tgz#60624c1b48a39d773ef6cce6421a4f33ecc166bb" dependencies: - babel-runtime "^5.8.25" - classnames "^2.1.5" - dom-helpers "^2.4.0" - invariant "^2.1.2" - keycode "^2.1.0" - lodash-compat "^3.10.1" - react-overlays "^0.6.0" - react-prop-types "^0.3.0" - uncontrollable "^3.1.3" - warning "^2.1.0" + babel-runtime "^6.11.6" + classnames "^2.2.5" + dom-helpers "^3.2.0" + invariant "^2.2.1" + keycode "^2.1.2" + prop-types "^15.5.10" + prop-types-extra "^1.0.1" + react-overlays "^0.8.0" + react-prop-types "^0.4.0" + react-transition-group "^2.0.0" + uncontrollable "^4.1.0" + warning "^3.0.0" -react-copy-to-clipboard@^4.2.3: - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-4.3.1.tgz#aa429ce6029077c987e2bc4af7eec9a09ba5075b" +react-copy-to-clipboard@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.1.tgz#8eae107bb400be73132ed3b6a7b4fb156090208e" dependencies: copy-to-clipboard "^3" - create-react-class "^15.5.2" prop-types "^15.5.8" -react-custom-scrollbars@^2.2.2: - version "2.3.0" - resolved "https://registry.yarnpkg.com/react-custom-scrollbars/-/react-custom-scrollbars-2.3.0.tgz#53c9b72be6933e7a853c6ece7493dda7998752b3" +react-custom-scrollbars@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/react-custom-scrollbars/-/react-custom-scrollbars-4.2.1.tgz#830fd9502927e97e8a78c2086813899b2a8b66db" dependencies: dom-css "^2.0.0" + prop-types "^15.5.10" raf "^3.1.0" -react-dom@^0.14.6: - version "0.14.9" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-0.14.9.tgz#05064a3dcf0fb1880a3b2bfc9d58c55d8d9f6293" +react-dom@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" -react-dropzone@^3.5.3: - version "3.13.3" - resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-3.13.3.tgz#b8bde4b5a12842f85196b45e8cc2959834b81962" +react-dropzone@^4.2.3: + version "4.2.7" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-4.2.7.tgz#a4963b1f725d5a91e63cd1c2b55ddce537953d46" dependencies: attr-accept "^1.0.3" prop-types "^15.5.7" @@ -5075,54 +5773,93 @@ react-onclickout@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/react-onclickout/-/react-onclickout-2.0.4.tgz#2c7539a647e1dcdcab0b28e2f4eae3c3e00f0c64" -react-overlays@^0.6.0: - version "0.6.12" - resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.6.12.tgz#a079c750cc429d7db4c7474a95b4b54033e255c3" +react-overlays@^0.8.0: + version "0.8.3" + resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.8.3.tgz#fad65eea5b24301cca192a169f5dddb0b20d3ac5" dependencies: classnames "^2.2.5" - dom-helpers "^3.2.0" - react-prop-types "^0.4.0" + dom-helpers "^3.2.1" + prop-types "^15.5.10" + prop-types-extra "^1.0.1" + react-transition-group "^2.2.0" warning "^3.0.0" -react-prop-types@^0.3.0: - version "0.3.2" - resolved "https://registry.yarnpkg.com/react-prop-types/-/react-prop-types-0.3.2.tgz#e2763ac6f3a80199d8981c3647c44b0554c97b7f" - dependencies: - warning "^2.0.0" - react-prop-types@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/react-prop-types/-/react-prop-types-0.4.0.tgz#f99b0bfb4006929c9af2051e7c1414a5c75b93d0" dependencies: warning "^3.0.0" -react-redux@^4.4.5: - version "4.4.8" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.8.tgz#e7bc1dd100e8b64e96ac8212db113239b9e2e08f" +react-reconciler@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.7.0.tgz#9614894103e5f138deeeb5eabaf3ee80eb1d026d" dependencies: - create-react-class "^15.5.1" - hoist-non-react-statics "^1.0.3" + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + +react-redux@^5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946" + dependencies: + hoist-non-react-statics "^2.2.1" invariant "^2.0.0" lodash "^4.2.0" + lodash-es "^4.2.0" loose-envify "^1.1.0" - prop-types "^15.5.4" + prop-types "^15.5.10" -react-router@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-2.8.1.tgz#73e9491f6ceb316d0f779829081863e378ee4ed7" +react-router-dom@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.2.2.tgz#c8a81df3adc58bba8a76782e946cbd4eae649b8d" dependencies: - history "^2.1.2" - hoist-non-react-statics "^1.2.0" - invariant "^2.2.1" - loose-envify "^1.2.0" + history "^4.7.2" + invariant "^2.2.2" + loose-envify "^1.3.1" + prop-types "^15.5.4" + react-router "^4.2.0" warning "^3.0.0" -react@^0.14.8: - version "0.14.9" - resolved "https://registry.yarnpkg.com/react/-/react-0.14.9.tgz#9110a6497c49d44ba1c0edd317aec29c2e0d91d1" +react-router@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.2.0.tgz#61f7b3e3770daeb24062dae3eedef1b054155986" dependencies: - envify "^3.0.0" - fbjs "^0.6.1" + history "^4.7.2" + hoist-non-react-statics "^2.3.0" + invariant "^2.2.2" + loose-envify "^1.3.1" + path-to-regexp "^1.7.0" + prop-types "^15.5.4" + warning "^3.0.0" + +react-test-renderer@^16.0.0-0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211" + dependencies: + fbjs "^0.8.16" + object-assign "^4.1.1" + prop-types "^15.6.0" + +react-transition-group@^2.0.0, react-transition-group@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.2.1.tgz#e9fb677b79e6455fd391b03823afe84849df4a10" + dependencies: + chain-function "^1.0.0" + classnames "^2.2.5" + dom-helpers "^3.2.0" + loose-envify "^1.3.1" + prop-types "^15.5.8" + warning "^3.0.0" + +react@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" read-pkg-up@^1.0.1: version "1.0.1" @@ -5154,7 +5891,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@1.0, readable-stream@~1.0.2: +readable-stream@1.0: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" dependencies: @@ -5163,15 +5900,6 @@ readable-stream@1.0, readable-stream@~1.0.2: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@1.0.27-1: - version "1.0.27-1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.27-1.tgz#6b67983c20357cefd07f0165001a16d710d91078" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4: version "2.3.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.2.tgz#5a04df05e4f57fe3f0dc68fdd11dc5c97c7e6f4d" @@ -5184,7 +5912,7 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.0.0" util-deprecate "~1.0.1" -readable-stream@^2.2.9, readable-stream@^2.3.3: +readable-stream@^2.0.5, readable-stream@^2.2.9, readable-stream@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: @@ -5205,14 +5933,11 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" -recast@^0.11.17: - version "0.11.23" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" +realpath-native@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" dependencies: - ast-types "0.9.6" - esprima "~3.1.0" - private "~0.1.5" - source-map "~0.5.0" + util.promisify "^1.0.0" redent@^1.0.0: version "1.0.0" @@ -5221,10 +5946,6 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" -reduce-component@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/reduce-component/-/reduce-component-1.0.1.tgz#e0c93542c574521bea13df0f9488ed82ab77c5da" - reduce-css-calc@^1.2.6: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" @@ -5239,13 +5960,19 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" -redux-thunk@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-1.0.3.tgz#778aa0099eea0595031ab6b39165f6670d8d26bd" +redux-mock-store@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.5.1.tgz#fca4335392e66605420b5559fe02fc5b8bb6d63c" + dependencies: + lodash.isplainobject "^4.0.6" -redux@^3.6.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.0.tgz#07a623cafd92eee8abe309d13d16538f6707926f" +redux-thunk@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5" + +redux@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" dependencies: lodash "^4.2.1" lodash-es "^4.2.1" @@ -5260,6 +5987,10 @@ regenerator-runtime@^0.10.0: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + regenerator-transform@0.9.11: version "0.9.11" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" @@ -5329,10 +6060,6 @@ repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" -repeat-string@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" - repeat-string@^1.5.0, repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -5343,7 +6070,21 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@^2.72.0, request@^2.81.0: +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + +request@2.81.0, request@^2.72.0, request@^2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -5370,6 +6111,33 @@ request@^2.72.0, request@^2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" +request@^2.83.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -5382,6 +6150,10 @@ requires-port@1.0.x, requires-port@1.x.x: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" +reselect@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -5392,16 +6164,28 @@ resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" +resolve-pathname@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" + resolve-url@^0.2.1, resolve-url@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" -resolve@^1.1.5, resolve@^1.1.6: +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.5: version "1.3.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" dependencies: path-parse "^1.0.5" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + rework@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" @@ -5415,13 +6199,13 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.3.3, rimraf@^2.5.1, rimraf@^2.6.1: +rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: glob "^7.0.5" -rimraf@^2.2.8: +rimraf@^2.2.8, rimraf@^2.5.4: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -5472,11 +6256,32 @@ rocambole-whitespace@^1.0.0: dependencies: esprima "^2.1" +rst-selector-parser@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" + dependencies: + lodash.flattendeep "^4.4.0" + nearley "^2.7.10" + safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -sax@~1.2.1: +sane@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.3.0.tgz#3f3df584abf69e63d4bb74f0f8c42468e4d7d46b" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^2.0.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.1.1" + +sax@^1.2.4, sax@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -5494,10 +6299,14 @@ selfsigned@^1.9.1: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@^4.3.1, semver@~4.3.3: +semver@^4.3.1: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" +semver@^5.4.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + send@0.16.1: version "0.16.1" resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" @@ -5594,11 +6403,15 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -sigmund@^1.0.1, sigmund@~1.0.0: +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + +sigmund@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" -signal-exit@^3.0.0: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -5639,49 +6452,11 @@ sntp@1.x.x: dependencies: hoek "2.x.x" -socket.io-adapter@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b" +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" dependencies: - debug "2.3.3" - socket.io-parser "2.3.1" - -socket.io-client@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.4.tgz#ec9f820356ed99ef6d357f0756d648717bdd4281" - dependencies: - backo2 "1.0.2" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "2.3.3" - engine.io-client "~1.8.4" - has-binary "0.1.7" - indexof "0.0.1" - object-component "0.0.3" - parseuri "0.0.5" - socket.io-parser "2.3.1" - to-array "0.1.4" - -socket.io-parser@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0" - dependencies: - component-emitter "1.1.2" - debug "2.2.0" - isarray "0.0.1" - json3 "3.3.2" - -socket.io@^1.4.5: - version "1.7.4" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.4.tgz#2f7ecedc3391bf2d5c73e291fe233e6e34d4dd00" - dependencies: - debug "2.3.3" - engine.io "~1.8.4" - has-binary "0.1.7" - object-assign "4.1.0" - socket.io-adapter "0.5.0" - socket.io-client "1.7.4" - socket.io-parser "2.3.1" + hoek "4.x.x" sockjs-client@1.1.4: version "1.1.4" @@ -5734,12 +6509,24 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + source-map-support@^0.4.2: version "0.4.15" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" dependencies: source-map "^0.5.6" +source-map-support@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" + dependencies: + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -5748,7 +6535,7 @@ source-map-url@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" -source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" @@ -5758,16 +6545,20 @@ source-map@^0.1.38: dependencies: amdefine ">=0.0.4" -source-map@^0.4.2: +source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: amdefine ">=0.0.4" -source-map@~0.6.1: +source-map@^0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" +source-map@~0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + spdx-correct@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" @@ -5829,6 +6620,10 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +stack-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -5844,6 +6639,10 @@ stdin@*: version "0.0.1" resolved "https://registry.yarnpkg.com/stdin/-/stdin-0.0.1.tgz#d3041981aaec3dfdbc77a1b38d6372e38f5fb71e" +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" @@ -5865,6 +6664,13 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -5880,6 +6686,13 @@ string-width@^2.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^3.0.0" +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string_decoder@^1.0.0, string_decoder@~1.0.0, string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" @@ -5890,7 +6703,7 @@ string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" -stringstream@~0.0.4: +stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -5900,16 +6713,22 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -5938,25 +6757,20 @@ superagent-es6-promise@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/superagent-es6-promise/-/superagent-es6-promise-1.0.0.tgz#f50730843d4698a84b1d6125e7ad57f18cc2fda4" -superagent@^1.8.4: - version "1.8.5" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-1.8.5.tgz#1c0ddc3af30e80eb84ebc05cb2122da8fe940b55" +superagent@^3.8.2: + version "3.8.2" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.2.tgz#e4a11b9d047f7d3efeb3bbe536d9ec0021d16403" dependencies: - component-emitter "~1.2.0" - cookiejar "2.0.6" - debug "2" - extend "3.0.0" - form-data "1.0.0-rc3" - formidable "~1.0.14" - methods "~1.1.1" - mime "1.3.4" - qs "2.3.3" - readable-stream "1.0.27-1" - reduce-component "1.0.1" - -supports-color@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.1.1" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.0.5" supports-color@^1.3.1: version "1.3.1" @@ -5966,7 +6780,7 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.2.3: +supports-color@^3.1.2, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: @@ -6006,6 +6820,10 @@ symbol-observable@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" +symbol-tree@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + sync-exec@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/sync-exec/-/sync-exec-0.6.2.tgz#717d22cc53f0ce1def5594362f3a89a2ebb91105" @@ -6035,9 +6853,19 @@ tar@^2.2.1: fstream "^1.0.2" inherits "2" -through@~2.3.4: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" thunky@^0.1.0: version "0.1.0" @@ -6057,15 +6885,9 @@ tmatch@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/tmatch/-/tmatch-2.0.1.tgz#0c56246f33f30da1b8d3d72895abaf16660f38cf" -tmp@0.0.x: - version "0.0.31" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" - dependencies: - os-tmpdir "~1.0.1" - -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" to-arraybuffer@^1.0.0: version "1.0.1" @@ -6077,14 +6899,10 @@ to-camel-case@1.0.0: dependencies: to-space-case "^1.0.0" -to-fast-properties@^1.0.1: +to-fast-properties@^1.0.1, to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" -to-iso-string@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1" - to-no-case@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/to-no-case/-/to-no-case-1.0.2.tgz#c722907164ef6b178132c8e69930212d1b4aa16a" @@ -6124,12 +6942,24 @@ toposort@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.3.tgz#f02cd8a74bd8be2fc0e98611c3bacb95a171869c" +tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + dependencies: + punycode "^1.4.1" + tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" dependencies: punycode "^1.4.1" +tr46@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + dependencies: + punycode "^2.1.0" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -6152,6 +6982,12 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + type-is@~1.6.15: version "1.6.15" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" @@ -6170,7 +7006,7 @@ uglify-js@3.0.x, uglify-js@^3.0.6: commander "~2.9.0" source-map "~0.5.1" -uglify-js@^2.8.29: +uglify-js@^2.6, uglify-js@^2.8.29: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" dependencies: @@ -6195,16 +7031,20 @@ uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" -ultron@1.0.x: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" -uncontrollable@^3.1.3: - version "3.3.1" - resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-3.3.1.tgz#e23b402e7a4c69b1853fb4b43ce34b6480c65b6f" +uncontrollable@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-4.1.0.tgz#e0358291252e1865222d90939b19f2f49f81c1a9" dependencies: invariant "^2.1.0" +underscore@~1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" + union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -6293,17 +7133,17 @@ user-home@^2.0.0: dependencies: os-homedir "^1.0.0" -useragent@^2.1.6: - version "2.1.13" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.13.tgz#bba43e8aa24d5ceb83c2937473e102e21df74c10" - dependencies: - lru-cache "2.2.x" - tmp "0.0.x" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + util@0.10.3, util@^0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -6318,10 +7158,6 @@ utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" -utils-merge@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -6330,7 +7166,7 @@ uuid@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" -uuid@^3.0.1: +uuid@^3.0.1, uuid@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" @@ -6347,6 +7183,10 @@ validate-npm-package-license@^3.0.1: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" +value-equal@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" + vary@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" @@ -6371,15 +7211,17 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - -warning@^2.0.0, warning@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-2.1.0.tgz#21220d9c63afc77a8c92111e011af705ce0c6901" +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" dependencies: - loose-envify "^1.0.0" + browser-process-hrtime "^0.1.2" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" warning@^3.0.0: version "3.0.0" @@ -6387,6 +7229,13 @@ warning@^3.0.0: dependencies: loose-envify "^1.0.0" +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + watchpack@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" @@ -6401,7 +7250,11 @@ wbuf@^1.1.0, wbuf@^1.7.2: dependencies: minimalistic-assert "^1.0.0" -webpack-dev-middleware@1.12.2, webpack-dev-middleware@^1.12.0: +webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + +webpack-dev-middleware@1.12.2: version "1.12.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" dependencies: @@ -6494,13 +7347,23 @@ websocket-extensions@>=0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + dependencies: + iconv-lite "0.4.19" + whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" -whatwg-fetch@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" +whatwg-url@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.0" + webidl-conversions "^4.0.1" whet.extend@~0.9.9: version "0.9.9" @@ -6514,12 +7377,18 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.0.5, which@^1.2.1, which@^1.2.4, which@^1.2.9: +which@^1.0.5, which@^1.2.4, which@^1.2.9: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: isexe "^2.0.0" +which@^1.2.12, which@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" @@ -6538,6 +7407,10 @@ wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -6549,31 +7422,29 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -ws@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f" +write-file-atomic@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" dependencies: - options ">=0.0.5" - ultron "1.0.x" + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" -ws@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61" +ws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-4.0.0.tgz#bfe1da4c08eeb9780b986e0e4d10eccd7345999f" dependencies: - options ">=0.0.5" - ultron "1.0.x" - -wtf-8@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" xml-char-classes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" -xmlhttprequest-ssl@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" xtend@^4.0.0: version "4.0.1" @@ -6599,6 +7470,12 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" +yargs-parser@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + dependencies: + camelcase "^4.1.0" + yargs@6.6.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" @@ -6617,6 +7494,23 @@ yargs@6.6.0: y18n "^3.2.1" yargs-parser "^4.2.0" +yargs@^10.0.3: + version "10.1.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^8.1.0" + yargs@^8.0.1, yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" @@ -6643,7 +7537,3 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"