diff --git a/frontend/package.json b/frontend/package.json index 7230a36..c21113e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -2,6 +2,31 @@ "name": "frontend", "version": "0.1.0", "private": true, + "scripts": { + "start": "NODE_ENV=development react-scripts-ts start", + "build": "react-scripts-ts build", + "lint": "tslint -p tsconfig.json -c tslint.json \"src/**/*.{ts,tsx}\"", + "lint:fix": "yarn lint --fix", + "pretty": "prettier --write \"src/**/*.{ts,tsx}\"", + "test": "yarn lint && react-scripts-ts test --env=jsdom", + "eject": "react-scripts-ts eject" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "src/**/*.{ts,tsx,json,css}": [ + "yarn pretty", + "yarn lint:fix", + "git add" + ] + }, + "prettier": { + "printWidth": 120, + "parser": "typescript" + }, "dependencies": { "@blueprintjs/core": "^3.4.0", "@blueprintjs/icons": "^3.1.0", @@ -21,13 +46,8 @@ "redux-thunk": "^2.3.0", "sanitize-html": "^1.18.4" }, - "scripts": { - "start": "NODE_ENV=development react-scripts-ts start", - "build": "react-scripts-ts build", - "test": "react-scripts-ts test --env=jsdom", - "eject": "react-scripts-ts eject" - }, "devDependencies": { + "@blueprintjs/tslint-config": "^1.8.0", "@types/classnames": "^2.2.6", "@types/jest": "^23.3.1", "@types/lodash": "^4.14.116", @@ -37,6 +57,9 @@ "@types/react-redux": "^6.0.6", "@types/react-virtualized": "^9.18.7", "@types/sanitize-html": "^1.18.0", + "husky": "^1.3.1", + "lint-staged": "^8.1.5", + "tslint-eslint-rules": "^5.4.0", "typescript": "^3.0.1" } } diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 5d2fb3c..2d43460 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,24 +1,24 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; -import { Dispatch } from 'redux'; +import * as React from "react"; +import { connect } from "react-redux"; +import { Dispatch } from "redux"; -import { Button, Classes, Dialog, NonIdealState, Spinner } from '@blueprintjs/core'; -import { IconNames } from '@blueprintjs/icons'; +import { Button, Classes, Dialog, NonIdealState, Spinner } from "@blueprintjs/core"; +import { IconNames } from "@blueprintjs/icons"; -import ErrorState from './components/ErrorState'; -import { Graph } from './components/Graph'; -import { Nav } from './components/Nav'; -import { Sidebar } from './components/Sidebar'; -import { DESKTOP_WIDTH_THRESHOLD } from './constants'; -import { fetchGraph, fetchInstances } from './redux/actions'; -import { IAppState, IGraph, IInstance } from './redux/types'; +import { ErrorState } from "./components/ErrorState"; +import { Graph } from "./components/Graph"; +import { Nav } from "./components/Nav"; +import { Sidebar } from "./components/Sidebar"; +import { DESKTOP_WIDTH_THRESHOLD } from "./constants"; +import { fetchGraph, fetchInstances } from "./redux/actions"; +import { IAppState, IGraph, IInstance } from "./redux/types"; interface IAppProps { graph?: IGraph; - instances?: IInstance[], + instances?: IInstance[]; isLoadingGraph: boolean; - isLoadingInstances: boolean, - graphLoadError: boolean, + isLoadingInstances: boolean; + graphLoadError: boolean; fetchInstances: () => void; fetchGraph: () => void; } @@ -26,7 +26,6 @@ interface IAppLocalState { mobileDialogOpen: boolean; } class AppImpl extends React.Component { - constructor(props: IAppProps) { super(props); this.state = { mobileDialogOpen: false }; @@ -40,7 +39,7 @@ class AppImpl extends React.Component { body = this.graphState(); } return ( -
+
-
- - ) - } +

Credits

+

+ This site is inspired by several other sites in the same vein: +

+ The source code for fediverse.space is available on{" "} + + GitLab + + ; issues and pull requests are welcome! +

+ +
+
+
+
+ + ); + }; - private handleAboutOpen = () => { - this.setState({aboutIsOpen: true}); - } + private handleAboutOpen = () => { + this.setState({ aboutIsOpen: true }); + }; - private handleAboutClose = () => { - this.setState({aboutIsOpen: false}); - } + private handleAboutClose = () => { + this.setState({ aboutIsOpen: false }); + }; } diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index bc71d93..bf9ed30 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -1,306 +1,324 @@ -import { orderBy } from 'lodash'; -import * as moment from 'moment'; -import * as React from 'react'; -import { connect } from 'react-redux'; -import { Dispatch } from 'redux'; -import * as sanitize from 'sanitize-html'; +import { orderBy } from "lodash"; +import * as moment from "moment"; +import * as React from "react"; +import { connect } from "react-redux"; +import { Dispatch } from "redux"; +import * as sanitize from "sanitize-html"; import { - AnchorButton, Button, Card, Classes, Divider, Elevation, HTMLTable, NonIdealState, Position, - Tab, Tabs, Tooltip -} from '@blueprintjs/core'; -import { IconNames } from '@blueprintjs/icons'; + AnchorButton, + Button, + Card, + Classes, + Code, + Divider, + Elevation, + H2, + H4, + HTMLTable, + NonIdealState, + Position, + Tab, + Tabs, + Tooltip +} from "@blueprintjs/core"; +import { IconNames } from "@blueprintjs/icons"; -import { selectAndLoadInstance } from '../redux/actions'; -import { IAppState, IGraph, IInstanceDetails } from '../redux/types'; -import ErrorState from './ErrorState'; +import { selectAndLoadInstance } from "../redux/actions"; +import { IAppState, IGraph, IInstanceDetails } from "../redux/types"; +import { ErrorState } from "./ErrorState"; interface ISidebarProps { - graph?: IGraph, - instanceName: string | null, - instanceLoadError: boolean, - instanceDetails: IInstanceDetails | null, - isLoadingInstanceDetails: boolean; - selectAndLoadInstance: (instanceName: string) => void; + graph?: IGraph; + instanceName: string | null; + instanceLoadError: boolean; + instanceDetails: IInstanceDetails | null; + isLoadingInstanceDetails: boolean; + selectAndLoadInstance: (instanceName: string) => void; } interface ISidebarState { - isOpen: boolean; + isOpen: boolean; } class SidebarImpl extends React.Component { + constructor(props: ISidebarProps) { + super(props); + const isOpen = window.innerWidth >= 900 ? true : false; + this.state = { isOpen }; + } - constructor(props: ISidebarProps) { - super(props); - const isOpen = window.innerWidth >= 900 ? true : false; - this.state = { isOpen }; + public render() { + const closedClass = this.state.isOpen ? "" : " closed"; + const buttonIcon = this.state.isOpen ? IconNames.DOUBLE_CHEVRON_RIGHT : IconNames.DOUBLE_CHEVRON_LEFT; + return ( +
+
+ ); + } + + private handleToggle = () => { + this.setState({ isOpen: !this.state.isOpen }); + }; + + private renderSidebarContents = () => { + if (this.props.isLoadingInstanceDetails) { + return this.renderLoadingState(); + } else if (!this.props.instanceDetails) { + return this.renderEmptyState(); + } else if (this.props.instanceDetails.status.toLowerCase().indexOf("personalinstance") > -1) { + return this.renderPersonalInstanceErrorState(); + } else if (this.props.instanceDetails.status !== "success") { + return this.renderMissingDataState(); + } else if (this.props.instanceLoadError) { + return ; } + return ( +
+ {this.renderHeading()} + + {this.props.instanceDetails.description && ( + + )} + {this.shouldRenderStats() && } + + + +
+ ); + }; - public render() { - const closedClass = this.state.isOpen ? "" : " closed"; - const buttonIcon = this.state.isOpen ? IconNames.DOUBLE_CHEVRON_RIGHT : IconNames.DOUBLE_CHEVRON_LEFT; - return ( -
-
- ) + private shouldRenderStats = () => { + const details = this.props.instanceDetails; + return details && (details.version || details.userCount || details.statusCount || details.domainCount); + }; + + private renderHeading = () => { + let content: JSX.Element; + if (!this.props.instanceName) { + content = {"No instance selected"}; + } else { + content = ( + + {this.props.instanceName + " "} + + + + + ); } + return ( +
+

{content}

+ +
+ ); + }; - private handleToggle = () => { - this.setState({ isOpen: !this.state.isOpen }); + private renderDescription = () => { + const description = this.props.instanceDetails!.description; + if (!description) { + return; } + return

; + }; - private renderSidebarContents = () => { - if (this.props.isLoadingInstanceDetails) { - return this.renderLoadingState(); - } else if (!this.props.instanceDetails) { - return this.renderEmptyState(); - } else if (this.props.instanceDetails.status.toLowerCase().indexOf('personalinstance') > -1) { - return this.renderPersonalInstanceErrorState(); - } else if (this.props.instanceDetails.status !== 'success') { - return this.renderMissingDataState(); - } else if (this.props.instanceLoadError) { - return ; - } - return ( -

- {this.renderHeading()} - - {this.props.instanceDetails.description && - } - {this.shouldRenderStats() && - } - - - -
- ); - } - - private shouldRenderStats = () => { - const details = this.props.instanceDetails; - return details && (details.version || details.userCount || details.statusCount || details.domainCount); - } - - private renderHeading = () => { - let content: JSX.Element; - if (!this.props.instanceName) { - content = {"No instance selected"}; - } else { - content = ( - - {this.props.instanceName + ' '} - - - - - ); - } - return ( -
-

{content}

- -
- ); - } - - private renderDescription = () => { - const description = this.props.instanceDetails!.description; - if (!description) { - return; - } - return ( -

- ) - } - - private renderVersionAndCounts = () => { - const version = this.props.instanceDetails!.version; - const userCount = this.props.instanceDetails!.userCount; - const statusCount = this.props.instanceDetails!.statusCount; - const domainCount = this.props.instanceDetails!.domainCount; - const lastUpdated = this.props.instanceDetails!.lastUpdated; - return ( -

- - - - Version - {{version} || "Unknown"} - - - Users - {userCount || "Unknown"} - - - Statuses - {statusCount || "Unknown"} - - - Known peers - {domainCount || "Unknown"} - - - Last updated - {moment(lastUpdated + "Z").fromNow() || "Unknown"} - - - -
- ) - } - - private renderNeighbors = () => { - if (!this.props.graph || !this.props.instanceName) { - return; - } - const edges = this.props.graph.edges.filter(e => [e.source, e.target].indexOf(this.props.instanceName!) > -1); - const neighbors: any[] = []; - edges.forEach(e => { - if (e.source === this.props.instanceName) { - neighbors.push({neighbor: e.target, weight: e.size}); - } else { - neighbors.push({neighbor: e.source, weight: e.size}); - } - }) - const neighborRows = orderBy(neighbors, ['weight'], ['desc']).map((neighborDetails: any, idx: number) => ( - - {neighborDetails.neighbor} - {neighborDetails.weight.toFixed(4)} + private renderVersionAndCounts = () => { + const version = this.props.instanceDetails!.version; + const userCount = this.props.instanceDetails!.userCount; + const statusCount = this.props.instanceDetails!.statusCount; + const domainCount = this.props.instanceDetails!.domainCount; + const lastUpdated = this.props.instanceDetails!.lastUpdated; + return ( +
+ + + + Version + {{version} || "Unknown"} - )); - return ( -
-

- The mention ratio is the average of how many times the two instances mention each other per status. - A mention ratio of 1 would mean that every single status contained a mention of a user on the other instance. -

- - - - Instance - Mention ratio - - - - {neighborRows} - - -
- ); - } - - private renderPeers = () => { - const peers = this.props.instanceDetails!.peers; - if (!peers || peers.length === 0) { - return; - } - const peerRows = peers.map(instance => ( - - {instance.name} + + Users + {userCount || "Unknown"} - )); - return ( -
-

- All the instances, past and present, that {this.props.instanceName} knows about. -

- - - {peerRows} - - -
- ) - } + + Statuses + {statusCount || "Unknown"} + + + Known peers + {domainCount || "Unknown"} + + + Last updated + {moment(lastUpdated + "Z").fromNow() || "Unknown"} + + +
+
+ ); + }; - private renderEmptyState = () => { - return ( - - ) + private renderNeighbors = () => { + if (!this.props.graph || !this.props.instanceName) { + return; } + const edges = this.props.graph.edges.filter(e => [e.source, e.target].indexOf(this.props.instanceName!) > -1); + const neighbors: any[] = []; + edges.forEach(e => { + if (e.source === this.props.instanceName) { + neighbors.push({ neighbor: e.target, weight: e.size }); + } else { + neighbors.push({ neighbor: e.source, weight: e.size }); + } + }); + const neighborRows = orderBy(neighbors, ["weight"], ["desc"]).map((neighborDetails: any, idx: number) => ( + + + + {neighborDetails.neighbor} + + + {neighborDetails.weight.toFixed(4)} + + )); + return ( +
+

+ The mention ratio is the average of how many times the two instances mention each other per status. A mention + ratio of 1 would mean that every single status contained a mention of a user on the other instance. +

+ + + + Instance + Mention ratio + + + {neighborRows} + +
+ ); + }; - private renderLoadingState = () => { - return ( -
-

Description

-

- Eaque rerum sequi unde omnis voluptatibus non quia fugit. Dignissimos asperiores aut incidunt. - Cupiditate sit voluptates quia nulla et saepe id suscipit. - Voluptas sed rerum placeat consectetur pariatur necessitatibus tempora. - Eaque rerum sequi unde omnis voluptatibus non quia fugit. Dignissimos asperiores aut incidunt. - Cupiditate sit voluptates quia nulla et saepe id suscipit. - Voluptas sed rerum placeat consectetur pariatur necessitatibus tempora. -

-

Version

-

- Eaque rerum sequi unde omnis voluptatibus non quia fugit. -

-

Stats

-

- Eaque rerum sequi unde omnis voluptatibus non quia fugit. Dignissimos asperiores aut incidunt. - Cupiditate sit voluptates quia nulla et saepe id suscipit. - Eaque rerum sequi unde omnis voluptatibus non quia fugit. Dignissimos asperiores aut incidunt. - Cupiditate sit voluptates quia nulla et saepe id suscipit. -

-
- ); + private renderPeers = () => { + const peers = this.props.instanceDetails!.peers; + if (!peers || peers.length === 0) { + return; } + const peerRows = peers.map(instance => ( + + + + {instance.name} + + + + )); + return ( +
+

+ All the instances, past and present, that {this.props.instanceName} knows about. +

+ + {peerRows} + +
+ ); + }; - private renderPersonalInstanceErrorState = () => { - return ( - - Message @tao to opt in} - /> - ) - } + private renderEmptyState = () => { + return ( + + ); + }; - private renderMissingDataState = () => { - return ( - - ) - } + private renderLoadingState = () => { + return ( +
+

+ Description +

+

+ Eaque rerum sequi unde omnis voluptatibus non quia fugit. Dignissimos asperiores aut incidunt. Cupiditate sit + voluptates quia nulla et saepe id suscipit. Voluptas sed rerum placeat consectetur pariatur necessitatibus + tempora. Eaque rerum sequi unde omnis voluptatibus non quia fugit. Dignissimos asperiores aut incidunt. + Cupiditate sit voluptates quia nulla et saepe id suscipit. Voluptas sed rerum placeat consectetur pariatur + necessitatibus tempora. +

+

+ Version +

+

Eaque rerum sequi unde omnis voluptatibus non quia fugit.

+

+ Stats +

+

+ Eaque rerum sequi unde omnis voluptatibus non quia fugit. Dignissimos asperiores aut incidunt. Cupiditate sit + voluptates quia nulla et saepe id suscipit. Eaque rerum sequi unde omnis voluptatibus non quia fugit. + Dignissimos asperiores aut incidunt. Cupiditate sit voluptates quia nulla et saepe id suscipit. +

+
+ ); + }; - private openInstanceLink = () => { - window.open("https://" + this.props.instanceName, "_blank"); - } + private renderPersonalInstanceErrorState = () => { + return ( + + Message @tao to opt in + + } + /> + ); + }; - private selectInstance = (e: any) => { - this.props.selectAndLoadInstance(e.target.innerText); - } + private renderMissingDataState = () => { + return ( + + ); + }; + + private openInstanceLink = () => { + window.open("https://" + this.props.instanceName, "_blank"); + }; + + private selectInstance = (e: any) => { + this.props.selectAndLoadInstance(e.target.innerText); + }; } const mapStateToProps = (state: IAppState) => ({ - graph: state.data.graph, - instanceDetails: state.currentInstance.currentInstanceDetails, - instanceLoadError: state.currentInstance.error, - instanceName: state.currentInstance.currentInstanceName, - isLoadingInstanceDetails: state.currentInstance.isLoadingInstanceDetails, + graph: state.data.graph, + instanceDetails: state.currentInstance.currentInstanceDetails, + instanceLoadError: state.currentInstance.error, + instanceName: state.currentInstance.currentInstanceName, + isLoadingInstanceDetails: state.currentInstance.isLoadingInstanceDetails }); const mapDispatchToProps = (dispatch: Dispatch) => ({ - selectAndLoadInstance: (instanceName: string) => dispatch(selectAndLoadInstance(instanceName) as any), + selectAndLoadInstance: (instanceName: string) => dispatch(selectAndLoadInstance(instanceName) as any) }); -export const Sidebar = connect(mapStateToProps, mapDispatchToProps)(SidebarImpl); +export const Sidebar = connect( + mapStateToProps, + mapDispatchToProps +)(SidebarImpl); diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index c85ff17..03fb130 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -1,19 +1,19 @@ -import '../node_modules/@blueprintjs/core/lib/css/blueprint.css'; -import '../node_modules/@blueprintjs/icons/lib/css/blueprint-icons.css'; -import '../node_modules/@blueprintjs/select/lib/css/blueprint-select.css'; -import '../node_modules/normalize.css/normalize.css'; -import './index.css'; +import "../node_modules/@blueprintjs/core/lib/css/blueprint.css"; +import "../node_modules/@blueprintjs/icons/lib/css/blueprint-icons.css"; +import "../node_modules/@blueprintjs/select/lib/css/blueprint-select.css"; +import "../node_modules/normalize.css/normalize.css"; +import "./index.css"; -import * as React from 'react'; -import * as ReactDOM from 'react-dom'; -import { Provider } from 'react-redux'; -import { applyMiddleware, compose, createStore } from 'redux'; -import thunk from 'redux-thunk'; +import * as React from "react"; +import * as ReactDOM from "react-dom"; +import { Provider } from "react-redux"; +import { applyMiddleware, compose, createStore } from "redux"; +import thunk from "redux-thunk"; -import { FocusStyleManager } from '@blueprintjs/core'; +import { FocusStyleManager } from "@blueprintjs/core"; -import { App } from './App'; -import { rootReducer } from './redux/reducers'; +import { App } from "./App"; +import { rootReducer } from "./redux/reducers"; // https://blueprintjs.com/docs/#core/accessibility.focus-management FocusStyleManager.onlyShowFocusOnTabs(); @@ -21,13 +21,11 @@ FocusStyleManager.onlyShowFocusOnTabs(); // Initialize redux // @ts-ignore const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; -const store = createStore(rootReducer, composeEnhancers( - applyMiddleware(thunk) -)); +const store = createStore(rootReducer, composeEnhancers(applyMiddleware(thunk))); ReactDOM.render( , - document.getElementById('root') as HTMLElement + document.getElementById("root") as HTMLElement ); diff --git a/frontend/src/redux/actions.ts b/frontend/src/redux/actions.ts index 315e845..35071b1 100644 --- a/frontend/src/redux/actions.ts +++ b/frontend/src/redux/actions.ts @@ -1,101 +1,100 @@ -import { Dispatch } from 'redux'; +import { Dispatch } from "redux"; -import { getFromApi } from '../util'; -import { ActionType, IGraph, IInstance, IInstanceDetails } from './types'; +import { getFromApi } from "../util"; +import { ActionType, IGraph, IInstance, IInstanceDetails } from "./types"; // selectInstance and deselectInstance are not exported since we only call them from selectAndLoadInstance() const selectInstance = (instanceName: string) => { - return { - payload: instanceName, - type: ActionType.SELECT_INSTANCE, - } -} + return { + payload: instanceName, + type: ActionType.SELECT_INSTANCE + }; +}; const deselectInstance = () => { - return { - type: ActionType.DESELECT_INSTANCE, - } -} + return { + type: ActionType.DESELECT_INSTANCE + }; +}; export const requestInstances = () => { - return { - type: ActionType.REQUEST_INSTANCES, - } -} + return { + type: ActionType.REQUEST_INSTANCES + }; +}; export const receiveInstances = (instances: IInstance[]) => { - return { - payload: instances, - type: ActionType.RECEIVE_INSTANCES, - } -} + return { + payload: instances, + type: ActionType.RECEIVE_INSTANCES + }; +}; export const requestGraph = () => { - return { - type: ActionType.REQUEST_GRAPH, - } -} + return { + type: ActionType.REQUEST_GRAPH + }; +}; export const receiveGraph = (graph: IGraph) => { - return { - payload: graph, - type: ActionType.RECEIVE_GRAPH, - } -} + return { + payload: graph, + type: ActionType.RECEIVE_GRAPH + }; +}; const graphLoadFailed = () => { - return { - type: ActionType.GRAPH_LOAD_ERROR, - } -} + return { + type: ActionType.GRAPH_LOAD_ERROR + }; +}; const instanceLoadFailed = () => { - return { - type: ActionType.INSTANCE_LOAD_ERROR, - } -} + return { + type: ActionType.INSTANCE_LOAD_ERROR + }; +}; export const receiveInstanceDetails = (instanceDetails: IInstanceDetails) => { - return { - payload: instanceDetails, - type: ActionType.RECEIVE_INSTANCE_DETAILS, - } -} - + return { + payload: instanceDetails, + type: ActionType.RECEIVE_INSTANCE_DETAILS + }; +}; /** Async actions: https://redux.js.org/advanced/asyncactions */ export const fetchInstances = () => { - return (dispatch: Dispatch) => { - dispatch(requestInstances()); - return getFromApi("instances") - .then(instances => dispatch(receiveInstances(instances))) - .catch(e => dispatch(graphLoadFailed())); - } -} + return (dispatch: Dispatch) => { + dispatch(requestInstances()); + return getFromApi("instances") + .then(instances => dispatch(receiveInstances(instances))) + .catch(e => dispatch(graphLoadFailed())); + }; +}; export const selectAndLoadInstance = (instanceName: string) => { - return (dispatch: Dispatch) => { - if (!instanceName) { - dispatch(deselectInstance()); - return; - } - dispatch(selectInstance(instanceName)); - return getFromApi("instances/" + instanceName) - .then(details => dispatch(receiveInstanceDetails(details))) - .catch(e => dispatch(instanceLoadFailed())); + return (dispatch: Dispatch) => { + if (!instanceName) { + dispatch(deselectInstance()); + return; } -} + dispatch(selectInstance(instanceName)); + return getFromApi("instances/" + instanceName) + .then(details => dispatch(receiveInstanceDetails(details))) + .catch(e => dispatch(instanceLoadFailed())); + }; +}; export const fetchGraph = () => { - return (dispatch: Dispatch) => { - dispatch(requestGraph()); - return Promise.all([getFromApi("graph/edges"), getFromApi("graph/nodes")]) - .then(responses => { - return { - edges: responses[0], - nodes: responses[1], - }; - }) - .then(graph => dispatch(receiveGraph(graph))) - .catch(e => dispatch(graphLoadFailed())); - } -} + return (dispatch: Dispatch) => { + dispatch(requestGraph()); + return Promise.all([getFromApi("graph/edges"), getFromApi("graph/nodes")]) + .then(responses => { + return { + edges: responses[0], + nodes: responses[1] + }; + }) + .then(graph => dispatch(receiveGraph(graph))) + .catch(e => dispatch(graphLoadFailed())); + }; +}; diff --git a/frontend/src/redux/reducers.ts b/frontend/src/redux/reducers.ts index 830d1c6..feaf788 100644 --- a/frontend/src/redux/reducers.ts +++ b/frontend/src/redux/reducers.ts @@ -1,87 +1,87 @@ -import { combineReducers } from 'redux'; +import { combineReducers } from "redux"; -import { ActionType, IAction, ICurrentInstanceState, IDataState } from './types'; +import { ActionType, IAction, ICurrentInstanceState, IDataState } from "./types"; const initialDataState = { - error: false, - isLoadingGraph: false, - isLoadingInstances: false, -} + error: false, + isLoadingGraph: false, + isLoadingInstances: false +}; const data = (state: IDataState = initialDataState, action: IAction) => { - switch (action.type) { - case ActionType.REQUEST_INSTANCES: - return { - ...state, - instances: [], - isLoadingInstances: true, - }; - case ActionType.RECEIVE_INSTANCES: - return { - ...state, - instances: action.payload, - isLoadingInstances: false, - }; - case ActionType.REQUEST_GRAPH: - return { - ...state, - isLoadingGraph: true, - }; - case ActionType.RECEIVE_GRAPH: - return { - ...state, - graph: action.payload, - isLoadingGraph: false, - }; - case ActionType.GRAPH_LOAD_ERROR: - return { - ...state, - error: true, - isLoadingGraph: false, - isLoadingInstances: false, - }; - default: - return state; - } -} + switch (action.type) { + case ActionType.REQUEST_INSTANCES: + return { + ...state, + instances: [], + isLoadingInstances: true + }; + case ActionType.RECEIVE_INSTANCES: + return { + ...state, + instances: action.payload, + isLoadingInstances: false + }; + case ActionType.REQUEST_GRAPH: + return { + ...state, + isLoadingGraph: true + }; + case ActionType.RECEIVE_GRAPH: + return { + ...state, + graph: action.payload, + isLoadingGraph: false + }; + case ActionType.GRAPH_LOAD_ERROR: + return { + ...state, + error: true, + isLoadingGraph: false, + isLoadingInstances: false + }; + default: + return state; + } +}; const initialCurrentInstanceState = { - currentInstanceDetails: null, - currentInstanceName: null, - error: false, - isLoadingInstanceDetails: false, + currentInstanceDetails: null, + currentInstanceName: null, + error: false, + isLoadingInstanceDetails: false +}; +const currentInstance = (state = initialCurrentInstanceState, action: IAction): ICurrentInstanceState => { + switch (action.type) { + case ActionType.SELECT_INSTANCE: + return { + ...state, + currentInstanceName: action.payload, + isLoadingInstanceDetails: true + }; + case ActionType.RECEIVE_INSTANCE_DETAILS: + return { + ...state, + currentInstanceDetails: action.payload, + isLoadingInstanceDetails: false + }; + case ActionType.DESELECT_INSTANCE: + return { + ...state, + currentInstanceDetails: null, + currentInstanceName: null + }; + case ActionType.INSTANCE_LOAD_ERROR: + return { + ...state, + error: true, + isLoadingInstanceDetails: false + }; + default: + return state; + } }; -const currentInstance = (state = initialCurrentInstanceState , action: IAction): ICurrentInstanceState => { - switch (action.type) { - case ActionType.SELECT_INSTANCE: - return { - ...state, - currentInstanceName: action.payload, - isLoadingInstanceDetails: true, - }; - case ActionType.RECEIVE_INSTANCE_DETAILS: - return { - ...state, - currentInstanceDetails: action.payload, - isLoadingInstanceDetails: false, - } - case ActionType.DESELECT_INSTANCE: - return { - ...state, - currentInstanceDetails: null, - currentInstanceName: null, - } - case ActionType.INSTANCE_LOAD_ERROR: - return { - ...state, - error: true, - isLoadingInstanceDetails: false, - }; - default: - return state; - } -} export const rootReducer = combineReducers({ - currentInstance, - data, -}) \ No newline at end of file + currentInstance, + data +}); diff --git a/frontend/src/redux/types.ts b/frontend/src/redux/types.ts index 7f4bfeb..36c2c58 100644 --- a/frontend/src/redux/types.ts +++ b/frontend/src/redux/types.ts @@ -1,76 +1,76 @@ export enum ActionType { - SELECT_INSTANCE = 'SELECT_INSTANCE', - REQUEST_INSTANCES = 'REQUEST_INSTANCES', - RECEIVE_INSTANCES = 'RECEIVE_INSTANCES', - REQUEST_GRAPH = 'REQUEST_GRAPH', - RECEIVE_GRAPH = 'RECEIVE_GRAPH', - RECEIVE_INSTANCE_DETAILS = 'RECEIVE_INSTANCE_DETAILS', - DESELECT_INSTANCE = 'DESELECT_INSTANCE', - GRAPH_LOAD_ERROR = 'GRAPH_LOAD_ERROR', - INSTANCE_LOAD_ERROR = 'INSTANCE_LOAD_ERROR' + SELECT_INSTANCE = "SELECT_INSTANCE", + REQUEST_INSTANCES = "REQUEST_INSTANCES", + RECEIVE_INSTANCES = "RECEIVE_INSTANCES", + REQUEST_GRAPH = "REQUEST_GRAPH", + RECEIVE_GRAPH = "RECEIVE_GRAPH", + RECEIVE_INSTANCE_DETAILS = "RECEIVE_INSTANCE_DETAILS", + DESELECT_INSTANCE = "DESELECT_INSTANCE", + GRAPH_LOAD_ERROR = "GRAPH_LOAD_ERROR", + INSTANCE_LOAD_ERROR = "INSTANCE_LOAD_ERROR" } export interface IAction { - type: ActionType, - payload: any, + type: ActionType; + payload: any; } export interface IInstance { - name: string, - numUsers?: number, + name: string; + numUsers?: number; } export interface IInstanceDetails { - name: string; - peers?: IInstance[]; - description?: string; - domainCount?: number; - statusCount?: number; - userCount?: number; - version?: string; - lastUpdated?: string; - status: string; + name: string; + peers?: IInstance[]; + description?: string; + domainCount?: number; + statusCount?: number; + userCount?: number; + version?: string; + lastUpdated?: string; + status: string; } interface IGraphNode { - id: string; - label: string; - x: number; - y: number; - size?: number; - color?: string; + id: string; + label: string; + x: number; + y: number; + size?: number; + color?: string; } interface IGraphEdge { - source: string; - target: string; - id?: string; - size?: number; + source: string; + target: string; + id?: string; + size?: number; } export interface IGraph { - nodes: IGraphNode[]; - edges: IGraphEdge[]; + nodes: IGraphNode[]; + edges: IGraphEdge[]; } // Redux state export interface ICurrentInstanceState { - currentInstanceDetails: IInstanceDetails | null, - currentInstanceName: string | null, - isLoadingInstanceDetails: boolean, - error: boolean, + currentInstanceDetails: IInstanceDetails | null; + currentInstanceName: string | null; + isLoadingInstanceDetails: boolean; + error: boolean; } export interface IDataState { - instances?: IInstance[], - graph?: IGraph, - isLoadingInstances: boolean, - isLoadingGraph: boolean, - error: boolean, + instances?: IInstance[]; + graph?: IGraph; + isLoadingInstances: boolean; + isLoadingGraph: boolean; + error: boolean; } export interface IAppState { - currentInstance: ICurrentInstanceState; - data: IDataState, + currentInstance: ICurrentInstanceState; + data: IDataState; } diff --git a/frontend/tslint.json b/frontend/tslint.json index bfdc862..d791653 100644 --- a/frontend/tslint.json +++ b/frontend/tslint.json @@ -1,10 +1,9 @@ { - "extends": ["tslint:recommended", "tslint-react", "tslint-config-prettier"], - "linterOptions": { - "exclude": [ - "config/**/*.js", - "node_modules/**/*.ts", - "coverage/lcov-report/*.js" - ] - } + "extends": [ + "tslint:recommended", + "tslint-eslint-rules", + "tslint-react", + "@blueprintjs/tslint-config/blueprint-rules", + "tslint-config-prettier" + ] } diff --git a/frontend/yarn.lock b/frontend/yarn.lock index c86923a..10a03ad 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -16,6 +16,13 @@ esutils "^2.0.2" js-tokens "^4.0.0" +"@babel/runtime@7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0.tgz#adeb78fedfc855aa05bc041640f3f6f98e85424c" + integrity sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA== + dependencies: + regenerator-runtime "^0.12.0" + "@blueprintjs/core@^3.1.0", "@blueprintjs/core@^3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-3.4.0.tgz#cf5a61fb8288d8a58b892c7005d999c944d30521" @@ -46,6 +53,24 @@ classnames "^2.2" tslib "^1.9.0" +"@blueprintjs/tslint-config@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@blueprintjs/tslint-config/-/tslint-config-1.8.0.tgz#7ef8823463830d57b66a22117107f639a41ac3e4" + integrity sha512-y/khD7KaR1s39b3744OpbEYOVTIKgEdLFIqCwrUe1ULMwoNIpz+2Brkl+J76PcTWcNjAyzusAzNUPS8WcN1Kgw== + dependencies: + prettier "^1.16.1" + tslib "^1.9.0" + tslint-config-prettier "^1.17.0" + tslint-plugin-prettier "^2.0.1" + tslint-react "^3.6.0" + +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" + integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== + dependencies: + any-observable "^0.3.0" + "@types/classnames@^2.2.6": version "2.2.6" resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.6.tgz#dbe8a666156d556ed018e15a4c65f08937c3f628" @@ -221,6 +246,11 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== + anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" @@ -1325,6 +1355,20 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" @@ -1401,7 +1445,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@1.1.3, chalk@^1.1.3: +chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -1419,6 +1463,15 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^2.3.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" @@ -1465,6 +1518,11 @@ ci-info@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.4.0.tgz#4841d53cad49f11b827b648ebde27a6e189b412f" +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + 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" @@ -1501,12 +1559,20 @@ cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" -cli-cursor@^2.1.0: +cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: restore-cursor "^2.0.0" +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -1610,6 +1676,11 @@ commander@2.17.x, commander@^2.12.1, commander@~2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" +commander@^2.14.1, commander@^2.9.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" @@ -1745,6 +1816,16 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: parse-json "^2.2.0" require-from-string "^1.1.0" +cosmiconfig@^5.0.2, cosmiconfig@^5.0.7: + version "5.2.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8" + integrity sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.0" + parse-json "^4.0.0" + cpx@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/cpx/-/cpx-1.5.0.tgz#185be018511d87270dedccc293171e37655ab88f" @@ -1817,6 +1898,17 @@ cross-spawn@5.1.0, cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -1973,6 +2065,11 @@ data-urls@^1.0.0: whatwg-mimetype "^2.1.0" whatwg-url "^7.0.0" +date-fns@^1.27.2: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -1989,6 +2086,13 @@ debug@^3.1.0: dependencies: ms "2.0.0" +debug@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.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" @@ -1997,6 +2101,11 @@ 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" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + deep-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -2152,6 +2261,14 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" +doctrine@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" + integrity sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM= + dependencies: + esutils "^1.1.6" + isarray "0.0.1" + dom-converter@~0.1: version "0.1.4" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" @@ -2275,6 +2392,11 @@ electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: version "1.3.61" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.61.tgz#a8ac295b28d0f03d85e37326fd16b6b6b17a1795" +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= + elliptic@^6.0.0: version "6.4.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" @@ -2326,7 +2448,7 @@ errno@^0.1.3, errno@~0.1.7: dependencies: prr "~1.0.1" -error-ex@^1.2.0: +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: @@ -2411,7 +2533,7 @@ escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, 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" @@ -2435,6 +2557,14 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-plugin-prettier@^2.2.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" + integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA== + dependencies: + fast-diff "^1.1.1" + jest-docblock "^21.0.0" + esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -2457,6 +2587,11 @@ 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" +esutils@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" + integrity sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U= + esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -2511,6 +2646,19 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -2660,6 +2808,11 @@ fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" +fast-diff@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + 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" @@ -2702,6 +2855,14 @@ fbjs@^0.8.0, fbjs@^0.8.16: setimmediate "^1.0.5" ua-parser-js "^0.7.18" +figures@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -2772,6 +2933,11 @@ find-index@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" +find-parent-dir@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -2785,6 +2951,13 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" @@ -2796,6 +2969,11 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" +fn-name@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" + integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= + follow-redirects@^1.0.0: version "1.5.7" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.7.tgz#a39e4804dacb90202bca76a9e2ac10433ca6a69a" @@ -2914,6 +3092,15 @@ function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" +g-status@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" + integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA== + dependencies: + arrify "^1.0.1" + matcher "^1.0.0" + simple-git "^1.85.0" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -2931,14 +3118,31 @@ get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" + integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -3317,6 +3521,22 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" +husky@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" + integrity sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg== + dependencies: + cosmiconfig "^5.0.7" + execa "^1.0.0" + find-up "^3.0.0" + get-stdin "^6.0.0" + is-ci "^2.0.0" + pkg-dir "^3.0.0" + please-upgrade-node "^3.1.1" + read-pkg "^4.0.1" + run-node "^1.0.0" + slash "^2.0.0" + iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" @@ -3357,6 +3577,14 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -3385,6 +3613,11 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -3505,6 +3738,13 @@ is-ci@^1.0.10: dependencies: ci-info "^1.3.0" +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.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" @@ -3634,10 +3874,17 @@ is-number@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" -is-obj@^1.0.0: +is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== + dependencies: + symbol-observable "^1.1.0" + is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -3686,6 +3933,11 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" @@ -3901,6 +4153,11 @@ jest-diff@^22.4.0, jest-diff@^22.4.3: jest-get-type "^22.4.3" pretty-format "^22.4.3" +jest-docblock@^21.0.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== + jest-docblock@^22.4.0, jest-docblock@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19" @@ -4102,6 +4359,14 @@ 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.13.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^3.4.3, js-yaml@^3.7.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" @@ -4163,6 +4428,11 @@ json-loader@^0.5.4: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" @@ -4291,6 +4561,86 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +lint-staged@^8.1.5: + version "8.1.5" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.5.tgz#372476fe1a58b8834eb562ed4c99126bd60bdd79" + integrity sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA== + dependencies: + chalk "^2.3.1" + commander "^2.14.1" + cosmiconfig "^5.0.2" + debug "^3.1.0" + dedent "^0.7.0" + del "^3.0.0" + execa "^1.0.0" + find-parent-dir "^0.3.0" + g-status "^2.0.2" + is-glob "^4.0.0" + is-windows "^1.0.2" + listr "^0.14.2" + listr-update-renderer "^0.5.0" + lodash "^4.17.11" + log-symbols "^2.2.0" + micromatch "^3.1.8" + npm-which "^3.0.1" + p-map "^1.1.1" + path-is-inside "^1.0.2" + pify "^3.0.0" + please-upgrade-node "^3.0.2" + staged-git-files "1.1.2" + string-argv "^0.0.2" + stringify-object "^3.2.2" + yup "^0.26.10" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= + +listr-update-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" + integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^2.3.0" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" + integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== + dependencies: + chalk "^2.4.1" + cli-cursor "^2.1.0" + date-fns "^1.27.2" + figures "^2.0.0" + +listr@^0.14.2: + version "0.14.3" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" + integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.5.0" + listr-verbose-renderer "^0.5.0" + p-map "^2.0.0" + rxjs "^6.3.3" + 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" @@ -4338,6 +4688,14 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + lodash-es@^4.17.5: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.10.tgz#62cd7104cdf5dd87f235a837f0ede0e8e5117e05" @@ -4419,6 +4777,34 @@ lodash.uniq@^4.5.0: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" +lodash@^4.17.11: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + loglevel@^1.4.1: version "1.6.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" @@ -4481,6 +4867,13 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +matcher@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" + integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg== + dependencies: + escape-string-regexp "^1.0.4" + math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" @@ -4703,6 +5096,11 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -4762,6 +5160,11 @@ next-tick@1: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + no-case@^2.2.0: version "2.3.2" resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" @@ -4889,12 +5292,28 @@ npm-packlist@^1.1.6: ignore-walk "^3.0.1" npm-bundled "^1.0.1" +npm-path@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== + dependencies: + which "^1.2.10" + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" dependencies: path-key "^2.0.0" +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -5073,20 +5492,44 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" @@ -5139,6 +5582,14 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -5177,11 +5628,11 @@ 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" -path-is-inside@^1.0.1: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -5251,6 +5702,20 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" + integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ== + dependencies: + semver-compare "^1.0.0" + pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -5566,6 +6031,11 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +prettier@^1.16.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.0.tgz#53b303676eed22cc14a9f0cec09b477b3026c008" + integrity sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw== + pretty-bytes@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" @@ -5619,6 +6089,11 @@ prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2: loose-envify "^1.3.1" object-assign "^4.1.1" +property-expr@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" + integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== + proxy-addr@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" @@ -5655,6 +6130,14 @@ pump@^2.0.0, pump@^2.0.1: end-of-stream "^1.1.0" once "^1.3.1" +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pumpify@^1.3.3: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" @@ -5924,6 +6407,15 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" +read-pkg@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" + integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= + dependencies: + normalize-package-data "^2.3.2" + parse-json "^4.0.0" + pify "^3.0.0" + "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" @@ -6006,6 +6498,11 @@ regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" +regenerator-runtime@^0.12.0: + version "0.12.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" + integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -6234,6 +6731,11 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" +run-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" + integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== + run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" @@ -6250,6 +6752,13 @@ rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" +rxjs@^6.3.3: + version "6.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" + integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -6325,6 +6834,11 @@ selfsigned@^1.9.1: dependencies: node-forge "0.7.5" +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" @@ -6335,6 +6849,11 @@ semver-diff@^2.0.0: version "5.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" +semver@^5.5.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + send@0.16.2: version "0.16.2" resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" @@ -6454,10 +6973,27 @@ 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" +simple-git@^1.85.0: + version "1.110.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.110.0.tgz#54eb179089d055a7783d32399246cebc9d9933e9" + integrity sha512-UYY0rQkknk0P5eb+KW+03F4TevZ9ou0H+LoGaj7iiVgpnZH4wdj/HTViy/1tNNkmIPcmtxuBqXWiYt2YwlRKOQ== + dependencies: + debug "^4.0.1" + slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -6659,6 +7195,11 @@ stack-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" +staged-git-files@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" + integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -6710,6 +7251,11 @@ 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-argv@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" + integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= + string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" @@ -6742,6 +7288,15 @@ string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" +stringify-object@^3.2.2: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -6855,7 +7410,7 @@ sw-toolbox@^3.4.0: path-to-regexp "^1.0.1" serviceworker-cache-polyfill "^4.0.0" -symbol-observable@^1.2.0: +symbol-observable@^1.1.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -6863,6 +7418,11 @@ symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" +synchronous-promise@^2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.7.tgz#3574b3d2fae86b145356a4b89103e1577f646fe3" + integrity sha512-16GbgwTmFMYFyQMLvtQjvNWh30dsFe1cAW5Fg1wm5+dg84L9Pe36mftsIRU95/W2YsISxsz/xq4VB23sqpgb/A== + tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" @@ -6976,6 +7536,11 @@ toposort@^1.0.0: version "1.0.7" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" +toposort@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= + tough-cookie@>=2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -7038,7 +7603,12 @@ tsconfig-paths@^3.1.1: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: +tslib@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" + integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ== + +tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -7046,7 +7616,30 @@ tslint-config-prettier@^1.10.0: version "1.15.0" resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.15.0.tgz#76b9714399004ab6831fdcf76d89b73691c812cf" -tslint-react@^3.2.0: +tslint-config-prettier@^1.17.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" + integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== + +tslint-eslint-rules@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz#e488cc9181bf193fe5cd7bfca213a7695f1737b5" + integrity sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w== + dependencies: + doctrine "0.7.2" + tslib "1.9.0" + tsutils "^3.0.0" + +tslint-plugin-prettier@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-2.0.1.tgz#95b6a3b766622ffc44375825d7760225c50c3680" + integrity sha512-4FX9JIx/1rKHIPJNfMb+ooX1gPk5Vg3vNi7+dyFYpLO+O57F4g+b/fo1+W/G0SUOkBLHB/YKScxjX/P+7ZT/Tw== + dependencies: + eslint-plugin-prettier "^2.2.0" + lines-and-columns "^1.1.6" + tslib "^1.7.1" + +tslint-react@^3.2.0, tslint-react@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-3.6.0.tgz#7f462c95c4a0afaae82507f06517ff02942196a1" dependencies: @@ -7075,6 +7668,13 @@ tsutils@^2.13.1, tsutils@^2.27.2: dependencies: tslib "^1.8.1" +tsutils@^3.0.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.10.0.tgz#6f1c95c94606e098592b0dff06590cf9659227d6" + integrity sha512-q20XSMq7jutbGB8luhKKsQldRKWvyBO2BGqni3p4yq8Ys9bEP/xQw3KepKmMRt9gJ4lvQSScrihJrcKdKoSU7Q== + dependencies: + tslib "^1.8.1" + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -7544,7 +8144,7 @@ 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.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: +which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: @@ -7591,6 +8191,14 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -7716,3 +8324,15 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" + +yup@^0.26.10: + version "0.26.10" + resolved "https://registry.yarnpkg.com/yup/-/yup-0.26.10.tgz#3545839663289038faf25facfc07e11fd67c0cb1" + integrity sha512-keuNEbNSnsOTOuGCt3UJW69jDE3O4P+UHAakO7vSeFMnjaitcmlbij/a3oNb9g1Y1KvSKH/7O1R2PQ4m4TRylw== + dependencies: + "@babel/runtime" "7.0.0" + fn-name "~2.0.1" + lodash "^4.17.10" + property-expr "^1.5.0" + synchronous-promise "^2.0.5" + toposort "^2.0.2"