Refactor project structure

This commit is contained in:
Thomas Nordquist
2019-04-07 20:16:48 +02:00
parent 16c72fa9be
commit e2c60cca64
44 changed files with 306 additions and 529 deletions

View File

@@ -94,7 +94,6 @@
} }
</style> </style>
<script src="http://localhost:35729/livereload.js"></script>
</head> </head>
<body> <body>
<div id="app" style="font:-webkit-control"></div> <div id="app" style="font:-webkit-control"></div>

View File

@@ -9,15 +9,16 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@material-ui/core": "^4.0.0-alpha.1", "@material-ui/core": "^4.0.0-alpha.6",
"@material-ui/icons": "^3.0.2", "@material-ui/icons": "^4.0.0-alpha.1",
"@material-ui/lab": "^3.0.0-alpha.30", "@material-ui/lab": "^4.0.0-alpha.6",
"@material-ui/styles": "^3.0.0-alpha.10", "@material-ui/styles": "^4.0.0-alpha.6",
"compare-versions": "^3.4.0", "compare-versions": "^3.4.0",
"copy-text-to-clipboard": "^1.0.4", "copy-text-to-clipboard": "^1.0.4",
"diff": "^4.0.1", "diff": "^4.0.1",
"electron-telemetry": "git+https://github.com/thomasnordquist/electron-telemetry.git#dist", "electron-telemetry": "git+https://github.com/thomasnordquist/electron-telemetry.git#dist",
"get-value": "^3.0.1", "get-value": "^3.0.1",
"immutable": "^4.0.0-rc.12",
"js-base64": "^2.5.1", "js-base64": "^2.5.1",
"json-to-ast": "^2.1.0", "json-to-ast": "^2.1.0",
"lodash.debounce": "^4.0.8", "lodash.debounce": "^4.0.8",
@@ -43,7 +44,6 @@
"devDependencies": { "devDependencies": {
"@types/diff": "^4.0.1", "@types/diff": "^4.0.1",
"@types/get-value": "^3.0.1", "@types/get-value": "^3.0.1",
"@types/js-base64": "^2.3.1",
"@types/node": "^10.12.18", "@types/node": "^10.12.18",
"@types/prismjs": "^1.9.1", "@types/prismjs": "^1.9.1",
"@types/react": "^16.7.18", "@types/react": "^16.7.18",

View File

@@ -1,42 +0,0 @@
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
<svg width="45" height="45" viewBox="0 0 45 45" xmlns="http://www.w3.org/2000/svg" stroke="#fff">
<g fill="none" fill-rule="evenodd" transform="translate(1 1)" stroke-width="2">
<circle cx="22" cy="22" r="6" stroke-opacity="0">
<animate attributeName="r"
begin="1.5s" dur="3s"
values="6;22"
calcMode="linear"
repeatCount="indefinite" />
<animate attributeName="stroke-opacity"
begin="1.5s" dur="3s"
values="1;0" calcMode="linear"
repeatCount="indefinite" />
<animate attributeName="stroke-width"
begin="1.5s" dur="3s"
values="2;0" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="22" cy="22" r="6" stroke-opacity="0">
<animate attributeName="r"
begin="3s" dur="3s"
values="6;22"
calcMode="linear"
repeatCount="indefinite" />
<animate attributeName="stroke-opacity"
begin="3s" dur="3s"
values="1;0" calcMode="linear"
repeatCount="indefinite" />
<animate attributeName="stroke-width"
begin="3s" dur="3s"
values="2;0" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="22" cy="22" r="8">
<animate attributeName="r"
begin="0s" dur="1.5s"
values="6;1;2;3;4;5;6"
calcMode="linear"
repeatCount="indefinite" />
</circle>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -7,7 +7,7 @@ import { Dispatch } from 'redux'
import { globalActions } from '.' import { globalActions } from '.'
import { showError } from './Global' import { showError } from './Global'
import { showTree } from './Tree' import { showTree } from './Tree'
import { TopicViewModel } from '../TopicViewModel' import { TopicViewModel } from '../model/TopicViewModel'
import { import {
addMqttConnectionEvent, addMqttConnectionEvent,
makeConnectionStateEvent, makeConnectionStateEvent,

View File

@@ -1,7 +1,7 @@
import { AppState } from '../reducers' import { AppState } from '../reducers'
import { clearLegacyConnectionOptions, loadLegacyConnectionOptions } from '../model/LegacyConnectionSettings' import { clearLegacyConnectionOptions, loadLegacyConnectionOptions } from '../model/LegacyConnectionSettings'
import { ConnectionOptions, createEmptyConnection, makeDefaultConnections, CertificateParameters } from '../model/ConnectionOptions' import { ConnectionOptions, createEmptyConnection, makeDefaultConnections, CertificateParameters } from '../model/ConnectionOptions'
import { default as persistentStorage, StorageIdentifier } from '../PersistentStorage' import { default as persistentStorage, StorageIdentifier } from '../utils/PersistentStorage'
import { Dispatch } from 'redux' import { Dispatch } from 'redux'
import { showError } from './Global' import { showError } from './Global'
import { remote } from 'electron' import { remote } from 'electron'

View File

@@ -2,11 +2,11 @@ import * as q from '../../../backend/src/Model'
import { AppState } from '../reducers' import { AppState } from '../reducers'
import { autoExpandLimitSet } from '../components/SettingsDrawer/Settings' import { autoExpandLimitSet } from '../components/SettingsDrawer/Settings'
import { batchActions } from 'redux-batched-actions' import { batchActions } from 'redux-batched-actions'
import { default as persistentStorage, StorageIdentifier } from '../PersistentStorage' import { default as persistentStorage, StorageIdentifier } from '../utils/PersistentStorage'
import { Dispatch } from 'redux' import { Dispatch } from 'redux'
import { showError } from './Global' import { showError } from './Global'
import { showTree } from './Tree' import { showTree } from './Tree'
import { TopicViewModel } from '../TopicViewModel' import { TopicViewModel } from '../model/TopicViewModel'
import { import {
ActionTypes, ActionTypes,
SettingsState, SettingsState,
@@ -19,7 +19,7 @@ const settingsIdentifier: StorageIdentifier<Partial<SettingsState>> = {
id: 'Settings', id: 'Settings',
} }
export const loadSettings = () => async (dispatch: Dispatch<any>, _getState: () => AppState) => { export const loadSettings = () => async (dispatch: Dispatch<any>) => {
try { try {
const settings = await persistentStorage.load(settingsIdentifier) const settings = await persistentStorage.load(settingsIdentifier)
dispatch({ dispatch({
@@ -46,7 +46,7 @@ export const storeSettings = () => async (dispatch: Dispatch<any>, getState: ()
} }
} }
export const setAutoExpandLimit = (autoExpandLimit: number = 0) => (dispatch: Dispatch<any>, getState: () => AppState) => { export const setAutoExpandLimit = (autoExpandLimit: number = 0) => (dispatch: Dispatch<any>) => {
dispatch({ dispatch({
autoExpandLimit, autoExpandLimit,
type: ActionTypes.SETTINGS_SET_AUTO_EXPAND_LIMIT, type: ActionTypes.SETTINGS_SET_AUTO_EXPAND_LIMIT,
@@ -54,15 +54,15 @@ export const setAutoExpandLimit = (autoExpandLimit: number = 0) => (dispatch: Di
dispatch(storeSettings()) dispatch(storeSettings())
} }
export const selectTopicWithMouseOver = (selectTopicWithMouseOver: boolean) => (dispatch: Dispatch<any>, getState: () => AppState) => { export const selectTopicWithMouseOver = (doSelect: boolean) => (dispatch: Dispatch<any>) => {
dispatch({ dispatch({
selectTopicWithMouseOver, selectTopicWithMouseOver: doSelect,
type: ActionTypes.SETTINGS_SET_SELECT_TOPIC_WITH_MOUSE_OVER, type: ActionTypes.SETTINGS_SET_SELECT_TOPIC_WITH_MOUSE_OVER,
}) })
dispatch(storeSettings()) dispatch(storeSettings())
} }
export const setValueDisplayMode = (valueRendererDisplayMode: 'diff' | 'raw') => (dispatch: Dispatch<any>, getState: () => AppState) => { export const setValueDisplayMode = (valueRendererDisplayMode: 'diff' | 'raw') => (dispatch: Dispatch<any>) => {
dispatch({ dispatch({
valueRendererDisplayMode, valueRendererDisplayMode,
type: ActionTypes.SETTINGS_SET_VALUE_RENDERER_DISPLAY_MODE, type: ActionTypes.SETTINGS_SET_VALUE_RENDERER_DISPLAY_MODE,
@@ -70,21 +70,21 @@ export const setValueDisplayMode = (valueRendererDisplayMode: 'diff' | 'raw') =>
dispatch(storeSettings()) dispatch(storeSettings())
} }
export const toggleSettingsVisibility = () => (dispatch: Dispatch<any>, _getState: () => AppState) => { export const toggleSettingsVisibility = () => (dispatch: Dispatch<any>) => {
dispatch({ dispatch({
type: ActionTypes.SETTINGS_TOGGLE_VISIBILITY, type: ActionTypes.SETTINGS_TOGGLE_VISIBILITY,
}) })
dispatch(storeSettings()) dispatch(storeSettings())
} }
export const toggleHighlightTopicUpdates = () => (dispatch: Dispatch<any>, _getState: () => AppState) => { export const toggleHighlightTopicUpdates = () => (dispatch: Dispatch<any>) => {
dispatch({ dispatch({
type: ActionTypes.SETTINGS_TOGGLE_HIGHLIGHT_ACTIVITY, type: ActionTypes.SETTINGS_TOGGLE_HIGHLIGHT_ACTIVITY,
}) })
dispatch(storeSettings()) dispatch(storeSettings())
} }
export const setTopicOrder = (topicOrder: TopicOrder = TopicOrder.none) => (dispatch: Dispatch<any>, _getState: () => AppState) => { export const setTopicOrder = (topicOrder: TopicOrder = TopicOrder.none) => (dispatch: Dispatch<any>) => {
dispatch({ dispatch({
topicOrder, topicOrder,
type: ActionTypes.SETTINGS_SET_TOPIC_ORDER, type: ActionTypes.SETTINGS_SET_TOPIC_ORDER,

View File

@@ -4,7 +4,7 @@ import { AnyAction, Dispatch } from 'redux'
import { AppState } from '../reducers' import { AppState } from '../reducers'
import { batchActions } from 'redux-batched-actions' import { batchActions } from 'redux-batched-actions'
import { setTopic } from './Publish' import { setTopic } from './Publish'
import { TopicViewModel } from '../TopicViewModel' import { TopicViewModel } from '../model/TopicViewModel'
const debounce = require('lodash.debounce') const debounce = require('lodash.debounce')
export const selectTopic = (topic: q.TreeNode<TopicViewModel>) => (dispatch: Dispatch<any>, getState: () => AppState) => { export const selectTopic = (topic: q.TreeNode<TopicViewModel>) => (dispatch: Dispatch<any>, getState: () => AppState) => {
@@ -60,8 +60,6 @@ export const showTree = (tree?: q.Tree<TopicViewModel>) => (dispatch: Dispatch<a
export const togglePause = (tree?: q.Tree<TopicViewModel>) => (dispatch: Dispatch<any>, getState: () => AppState): AnyAction => { export const togglePause = (tree?: q.Tree<TopicViewModel>) => (dispatch: Dispatch<any>, getState: () => AppState): AnyAction => {
const paused = getState().tree.paused const paused = getState().tree.paused
const tree = getState().tree.tree
// tree && tree.applyUnmergedChanges()
return dispatch({ return dispatch({
type: paused ? ActionTypes.TREE_RESUME_UPDATES : ActionTypes.TREE_PAUSE_UPDATES, type: paused ? ActionTypes.TREE_RESUME_UPDATES : ActionTypes.TREE_PAUSE_UPDATES,

View File

@@ -1,21 +1,18 @@
import * as React from 'react' import * as React from 'react'
import ConnectionSetup from './components/ConnectionSetup/ConnectionSetup' import ConnectionSetup from './ConnectionSetup/ConnectionSetup'
import CssBaseline from '@material-ui/core/CssBaseline' import CssBaseline from '@material-ui/core/CssBaseline'
import ErrorBoundary from './ErrorBoundary' import ErrorBoundary from './ErrorBoundary'
import Notification from './components/Notification' import Notification from './Layout/Notification'
import Sidebar from './components/Sidebar/Sidebar' import TitleBar from './Layout/TitleBar'
import TitleBar from './components/TitleBar' import UpdateNotifier from '../UpdateNotifier'
import Tree from './components/Tree/Tree' import { AppState } from '../reducers'
import UpdateNotifier from './UpdateNotifier'
import { AppState } from './reducers'
import { bindActionCreators } from 'redux' import { bindActionCreators } from 'redux'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { default as SplitPane } from 'react-split-pane' import { globalActions, settingsActions } from '../actions'
import { globalActions, settingsActions } from './actions'
import { Theme, withStyles } from '@material-ui/core/styles' import { Theme, withStyles } from '@material-ui/core/styles'
const Settings = React.lazy(() => import('./components/SettingsDrawer/Settings')) const Settings = React.lazy(() => import('./SettingsDrawer/Settings'))
const ContentView = React.lazy(() => import('./components/ContentView')) const ContentView = React.lazy(() => import('./Layout/ContentView'))
interface Props { interface Props {
connectionId: string connectionId: string

View File

@@ -1,5 +1,5 @@
import * as React from 'react' import * as React from 'react'
import PersistentStorage from './PersistentStorage' import PersistentStorage from '../utils/PersistentStorage'
import SentimentDissatisfied from '@material-ui/icons/SentimentDissatisfied' import SentimentDissatisfied from '@material-ui/icons/SentimentDissatisfied'
import Warning from '@material-ui/icons/Warning' import Warning from '@material-ui/icons/Warning'
import { electronRendererTelementry } from 'electron-telemetry' import { electronRendererTelementry } from 'electron-telemetry'

View File

@@ -1,7 +1,7 @@
import * as React from 'react' import * as React from 'react'
import ReactSplitPane from 'react-split-pane' import ReactSplitPane from 'react-split-pane'
import { Sidebar } from './Sidebar' import { Sidebar } from '../Sidebar'
import Tree from './Tree/Tree' import Tree from '../Tree/Tree'
export default function ContentView(props: {heightProperty: any, paneDefaults: any, connectionId: any}) { export default function ContentView(props: {heightProperty: any, paneDefaults: any, connectionId: any}) {
return ( return (

View File

@@ -1,12 +1,12 @@
import * as React from 'react' import * as React from 'react'
import * as q from '../../../backend/src/Model' import * as q from '../../../../backend/src/Model'
import CustomIconButton from './CustomIconButton' import CustomIconButton from '../helper/CustomIconButton'
import Pause from '@material-ui/icons/PauseCircleFilled' import Pause from '@material-ui/icons/PauseCircleFilled'
import Resume from '@material-ui/icons/PlayCircleFilled' import Resume from '@material-ui/icons/PlayCircleFilled'
import { AppState } from '../reducers' import { AppState } from '../../reducers'
import { bindActionCreators } from 'redux' import { bindActionCreators } from 'redux'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { treeActions } from '../actions' import { treeActions } from '../../actions'
import { StyleRulesCallback, withStyles } from '@material-ui/core/styles' import { StyleRulesCallback, withStyles } from '@material-ui/core/styles'
import { Tooltip } from '@material-ui/core' import { Tooltip } from '@material-ui/core'

View File

@@ -1,13 +1,13 @@
import * as React from 'react' import * as React from 'react'
import ClearAdornment from './helper/ClearAdornment' import ClearAdornment from '../helper/ClearAdornment'
import CloudOff from '@material-ui/icons/CloudOff' import CloudOff from '@material-ui/icons/CloudOff'
import ConnectionHealthIndicator from './helper/ConnectionHealthIndicator' import ConnectionHealthIndicator from '../helper/ConnectionHealthIndicator'
import Menu from '@material-ui/icons/Menu' import Menu from '@material-ui/icons/Menu'
import Search from '@material-ui/icons/Search' import Search from '@material-ui/icons/Search'
import { AppState } from '../reducers' import { AppState } from '../../reducers'
import { bindActionCreators } from 'redux' import { bindActionCreators } from 'redux'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { connectionActions, settingsActions, treeActions } from '../actions' import { connectionActions, settingsActions, treeActions } from '../../actions'
import { fade } from '@material-ui/core/styles/colorManipulator' import { fade } from '@material-ui/core/styles/colorManipulator'
import { StyleRulesCallback, withStyles } from '@material-ui/core/styles' import { StyleRulesCallback, withStyles } from '@material-ui/core/styles'
import { import {

View File

@@ -3,7 +3,7 @@ import * as React from 'react'
import { AppState } from '../../reducers' import { AppState } from '../../reducers'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { StyleRulesCallback, withStyles } from '@material-ui/core/styles' import { StyleRulesCallback, withStyles } from '@material-ui/core/styles'
import { TopicViewModel } from '../../TopicViewModel' import { TopicViewModel } from '../../model/TopicViewModel'
import { Typography } from '@material-ui/core' import { Typography } from '@material-ui/core'
import { Base64Message } from '../../../../backend/src/Model/Base64Message' import { Base64Message } from '../../../../backend/src/Model/Base64Message'
import teal from '@material-ui/core/colors/teal' import teal from '@material-ui/core/colors/teal'

View File

@@ -4,7 +4,7 @@ import * as React from 'react'
import { Theme, withStyles } from '@material-ui/core' import { Theme, withStyles } from '@material-ui/core'
import 'prismjs/components/prism-json' import 'prismjs/components/prism-json'
import 'prismjs/themes/prism-tomorrow.css' import 'prismjs/themes/prism-tomorrow.css'
import { CodeBlockColors } from '../CodeBlockColors' import { CodeBlockColors } from './CodeBlockColors'
interface Props { interface Props {
previous: string previous: string

View File

@@ -1,6 +1,6 @@
import * as q from '../../../../backend/src/Model' import * as q from '../../../../backend/src/Model'
import * as React from 'react' import * as React from 'react'
import { TopicViewModel } from '../../TopicViewModel' import { TopicViewModel } from '../../model/TopicViewModel'
import { Typography } from '@material-ui/core' import { Typography } from '@material-ui/core'
interface Props { interface Props {

View File

@@ -36,7 +36,7 @@ import { bindActionCreators } from 'redux'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { publishActions, globalActions } from '../../../actions' import { publishActions, globalActions } from '../../../actions'
import ClearAdornment from '../../helper/ClearAdornment' import ClearAdornment from '../../helper/ClearAdornment'
import { TopicViewModel } from '../../../TopicViewModel' import { TopicViewModel } from '../../../model/TopicViewModel'
interface Props { interface Props {
node?: q.TreeNode<TopicViewModel> node?: q.TreeNode<TopicViewModel>
@@ -345,4 +345,4 @@ const mapStateToProps = (state: AppState) => {
} }
} }
export default withTheme(connect(mapStateToProps, mapDispatchToProps)(Publish)) export default connect(mapStateToProps, mapDispatchToProps)(withTheme(Publish))

View File

@@ -1,7 +1,7 @@
import * as q from '../../../../backend/src/Model' import * as q from '../../../../backend/src/Model'
import * as React from 'react' import * as React from 'react'
import Copy from '../helper/Copy' import Copy from '../helper/Copy'
import CustomIconButton from '../CustomIconButton' import CustomIconButton from '../helper/CustomIconButton'
import Delete from '@material-ui/icons/Delete' import Delete from '@material-ui/icons/Delete'
import ExpandMore from '@material-ui/icons/ExpandMore' import ExpandMore from '@material-ui/icons/ExpandMore'
import NodeStats from './NodeStats' import NodeStats from './NodeStats'
@@ -12,7 +12,7 @@ import { bindActionCreators } from 'redux'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { settingsActions, sidebarActions } from '../../actions' import { settingsActions, sidebarActions } from '../../actions'
import { StyleRulesCallback, Theme, withStyles } from '@material-ui/core/styles' import { StyleRulesCallback, Theme, withStyles } from '@material-ui/core/styles'
import { TopicViewModel } from '../../TopicViewModel' import { TopicViewModel } from '../../model/TopicViewModel'
import { import {
ExpansionPanel, ExpansionPanel,

View File

@@ -5,7 +5,7 @@ import { withStyles, Theme, StyleRulesCallback } from '@material-ui/core/styles'
import { treeActions } from '../../actions' import { treeActions } from '../../actions'
import { bindActionCreators } from 'redux' import { bindActionCreators } from 'redux'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { TopicViewModel } from '../../TopicViewModel' import { TopicViewModel } from '../../model/TopicViewModel'
interface Props { interface Props {
classes: any classes: any

View File

@@ -3,7 +3,7 @@ import * as React from 'react'
import BarChart from '@material-ui/icons/BarChart' import BarChart from '@material-ui/icons/BarChart'
import DateFormatter from '../../helper/DateFormatter' import DateFormatter from '../../helper/DateFormatter'
import History from '../History' import History from '../History'
import { TopicViewModel } from '../../../TopicViewModel' import { TopicViewModel } from '../../../model/TopicViewModel'
import { Base64Message } from '../../../../../backend/src/Model/Base64Message' import { Base64Message } from '../../../../../backend/src/Model/Base64Message'
const PlotHistory = React.lazy(() => import('./PlotHistory')) const PlotHistory = React.lazy(() => import('./PlotHistory'))

View File

@@ -5,7 +5,7 @@ import { AppState } from '../../reducers'
import { bindActionCreators } from 'redux' import { bindActionCreators } from 'redux'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { TopicOrder } from '../../reducers/Settings' import { TopicOrder } from '../../reducers/Settings'
import { TopicViewModel } from '../../TopicViewModel' import { TopicViewModel } from '../../model/TopicViewModel'
import { treeActions } from '../../actions' import { treeActions } from '../../actions'
const MovingAverage = require('moving-average') const MovingAverage = require('moving-average')

View File

@@ -4,7 +4,7 @@ import TreeNodeSubnodes from './TreeNodeSubnodes'
import TreeNodeTitle from './TreeNodeTitle' import TreeNodeTitle from './TreeNodeTitle'
import { Theme, withStyles } from '@material-ui/core/styles' import { Theme, withStyles } from '@material-ui/core/styles'
import { TopicOrder } from '../../reducers/Settings' import { TopicOrder } from '../../reducers/Settings'
import { TopicViewModel } from '../../TopicViewModel' import { TopicViewModel } from '../../model/TopicViewModel'
const debounce = require('lodash.debounce') const debounce = require('lodash.debounce')

View File

@@ -4,7 +4,7 @@ import * as q from '../../../../backend/src/Model'
import TreeNode from './TreeNode' import TreeNode from './TreeNode'
import { TopicOrder } from '../../reducers/Settings' import { TopicOrder } from '../../reducers/Settings'
import { Theme, withStyles } from '@material-ui/core' import { Theme, withStyles } from '@material-ui/core'
import { TopicViewModel } from '../../TopicViewModel' import { TopicViewModel } from '../../model/TopicViewModel'
export interface Props { export interface Props {
animateChanges: boolean animateChanges: boolean

View File

@@ -2,7 +2,7 @@ import * as React from 'react'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import * as q from '../../../../backend/src/Model' import * as q from '../../../../backend/src/Model'
import { withStyles, Theme } from '@material-ui/core' import { withStyles, Theme } from '@material-ui/core'
import { TopicViewModel } from '../../TopicViewModel' import { TopicViewModel } from '../../model/TopicViewModel'
import { Base64Message } from '../../../../backend/src/Model/Base64Message' import { Base64Message } from '../../../../backend/src/Model/Base64Message'
const debounce = require('lodash.debounce') const debounce = require('lodash.debounce')

View File

@@ -1,6 +1,6 @@
import * as React from 'react' import * as React from 'react'
import Check from '@material-ui/icons/Check' import Check from '@material-ui/icons/Check'
import CustomIconButton from '../CustomIconButton' import CustomIconButton from './CustomIconButton'
import FileCopy from '@material-ui/icons/FileCopy' import FileCopy from '@material-ui/icons/FileCopy'
import green from '@material-ui/core/colors/green' import green from '@material-ui/core/colors/green'
import { Snackbar, SnackbarContent, Tooltip } from '@material-ui/core' import { Snackbar, SnackbarContent, Tooltip } from '@material-ui/core'

View File

@@ -1,18 +1,18 @@
import * as React from 'react' import * as React from 'react'
import * as ReactDOM from 'react-dom' import * as ReactDOM from 'react-dom'
import amber from '@material-ui/core/colors/amber' import amber from '@material-ui/core/colors/amber'
import App from './App' import App from './components/App'
import Demo from './components/Demo' import Demo from './components/Demo'
import reducers, { AppState } from './reducers' import reducers, { AppState } from './reducers'
import reduxThunk from 'redux-thunk' import reduxThunk from 'redux-thunk'
import brown from '@material-ui/core/colors/brown'
import teal from '@material-ui/core/colors/teal' import teal from '@material-ui/core/colors/teal'
import { applyMiddleware, compose, createStore } from 'redux' import { applyMiddleware, compose, createStore } from 'redux'
import { batchDispatchMiddleware } from 'redux-batched-actions' import { batchDispatchMiddleware } from 'redux-batched-actions'
import { connect, Provider } from 'react-redux' import { connect, Provider } from 'react-redux'
import { createMuiTheme, Theme } from '@material-ui/core/styles' import { createMuiTheme, Theme } from '@material-ui/core/styles'
import { ThemeProvider } from '@material-ui/styles' import { ThemeProvider } from '@material-ui/styles'
import './tracking' import './utils/tracking'
const composeEnhancers = /*(window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || */ compose const composeEnhancers = /*(window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || */ compose
const store = createStore( const store = createStore(
@@ -42,6 +42,7 @@ function createTheme(type: 'light' | 'dark') {
primary: { primary: {
main: '#931e2e', main: '#931e2e',
}, },
// primary: brown,
secondary: amber, secondary: amber,
// error: red, // error: red,
action: { action: {

View File

@@ -1,4 +1,4 @@
import { EventDispatcher } from '../../events' import { EventDispatcher } from '../../../events'
export class TopicViewModel { export class TopicViewModel {
private selected: boolean private selected: boolean

View File

@@ -2,7 +2,7 @@ import * as q from '../../../backend/src/Model'
import { Action } from 'redux' import { Action } from 'redux'
import { createReducer } from './lib' import { createReducer } from './lib'
import { MqttOptions } from '../../../backend/src/DataSource' import { MqttOptions } from '../../../backend/src/DataSource'
import { TopicViewModel } from '../TopicViewModel' import { TopicViewModel } from '../model/TopicViewModel'
export type ConnectionHealth = 'offline' | 'online' | 'connecting' export type ConnectionHealth = 'offline' | 'online' | 'connecting'
export interface ConnectionState { export interface ConnectionState {

View File

@@ -1,7 +1,7 @@
import * as q from '../../../backend/src/Model' import * as q from '../../../backend/src/Model'
import { Action } from 'redux' import { Action } from 'redux'
import { createReducer } from './lib' import { createReducer } from './lib'
import { TopicViewModel } from '../TopicViewModel' import { TopicViewModel } from '../model/TopicViewModel'
export interface TreeState { export interface TreeState {
tree?: q.Tree<TopicViewModel> tree?: q.Tree<TopicViewModel>

View File

@@ -3,7 +3,7 @@ import { connectionManagerReducer, ConnectionManagerState } from './ConnectionMa
import { connectionReducer, ConnectionState } from './Connection' import { connectionReducer, ConnectionState } from './Connection'
import { publishReducer, PublishState } from './Publish' import { publishReducer, PublishState } from './Publish'
import { settingsReducer, SettingsState } from './Settings' import { settingsReducer, SettingsState } from './Settings'
import { trackEvent } from '../tracking' import { trackEvent } from '../utils/tracking'
import { treeReducer, TreeState } from './Tree' import { treeReducer, TreeState } from './Tree'
export enum ActionTypes { export enum ActionTypes {

View File

@@ -1,25 +0,0 @@
let userId = window.localStorage.getItem('userId')
const sha1 = require('sha1')
import { electronRendererTelementry } from 'electron-telemetry'
if (!userId) {
userId = sha1(sha1(Math.random()) + sha1(performance.now()) + sha1(Date.now())).slice(0, 8) as string
window.localStorage.setItem('userId', userId)
}
setInterval(() => {
try {
electronRendererTelementry.trackCustomEvent({ name: 'heapStatistics', payload: process.getHeapStatistics() })
electronRendererTelementry.trackCustomEvent({ name: 'cpuUsage', payload: process.getCPUUsage() })
electronRendererTelementry.trackCustomEvent({ name: 'runningSince', payload: performance.now() })
} catch (error) {
console.error(error)
}
}, 60 * 1000)
export function trackEvent(name: string) {
if (name.match(/^@@redux/)) {
return
}
electronRendererTelementry.trackEvent(name)
}

View File

@@ -1,4 +1,4 @@
import { rendererEvents } from '../../events' import { rendererEvents } from '../../../events'
import { v4 } from 'uuid' import { v4 } from 'uuid'
import { import {
@@ -7,7 +7,7 @@ import {
storageLoadEvent, storageLoadEvent,
storageClearEvent, storageClearEvent,
makeStorageAcknowledgementEvent, makeStorageAcknowledgementEvent,
} from '../../events/StorageEvents' } from '../../../events/StorageEvents'
export interface StorageIdentifier<Model> { export interface StorageIdentifier<Model> {
id: string id: string

View File

@@ -1,4 +1,4 @@
import { electronRendererTelementry } from 'electron-telemetry' import { electronRendererTelementry } from 'electron-telemetry'
const spareMeFromGc = electronRendererTelementry const telemetry = electronRendererTelementry
electronRendererTelementry.registerErrorHandler() electronRendererTelementry.registerErrorHandler()

23
app/src/utils/tracking.ts Normal file
View File

@@ -0,0 +1,23 @@
import { electronRendererTelementry } from 'electron-telemetry'
// Used to determine long-time-stability and memory leaks
function trackProcessStatistics() {
setInterval(() => {
try {
electronRendererTelementry.trackCustomEvent({ name: 'heapStatistics', payload: process.getHeapStatistics() })
electronRendererTelementry.trackCustomEvent({ name: 'cpuUsage', payload: process.getCPUUsage() })
electronRendererTelementry.trackCustomEvent({ name: 'runningSince', payload: performance.now() })
} catch (error) {
console.error(error)
}
}, 60 * 1000)
}
trackProcessStatistics()
// Log reducer event names to determine what functionality is used and how to reproduce reported errors
export function trackEvent(name: string) {
if (name.match(/^@@redux/)) {
return
}
electronRendererTelementry.trackEvent(name)
}

View File

@@ -1,11 +1,13 @@
const LiveReloadPlugin = require('webpack-livereload-plugin'); const LiveReloadPlugin = require('webpack-livereload-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const HtmlWebpackPlugin = require('html-webpack-plugin') const HtmlWebpackPlugin = require('html-webpack-plugin')
const webpack = require('webpack');
module.exports = { module.exports = {
entry: { entry: {
app: "./src/index.tsx", app: "./src/index.tsx",
bugtracking: "./src/bugtracking.ts", bugtracking: "./src/utils/bugtracking.ts",
}, },
output: { output: {
chunkFilename: '[name].bundle.js', chunkFilename: '[name].bundle.js',
@@ -14,7 +16,7 @@ module.exports = {
}, },
optimization: { optimization: {
splitChunks: { splitChunks: {
chunks: 'async', chunks: 'all',
minSize: 30000, minSize: 30000,
maxSize: 0, maxSize: 0,
minChunks: 1, minChunks: 1,
@@ -24,7 +26,9 @@ module.exports = {
name: true, name: true,
cacheGroups: { cacheGroups: {
vendors: { vendors: {
test: /[\\/]node_modules[\\/]/, test: /[\\/]node_modules[\\/](react|react-dom|@material-ui|popper\.js|react|react-redux|prop-types|jss|redux|scheduler|react-transition-group)[\\/]/,
name: 'vendors',
chunks: 'all',
priority: -10 priority: -10
}, },
default: { default: {
@@ -35,27 +39,23 @@ module.exports = {
} }
} }
}, },
devServer: {
// contentBase: './dist', // content not from webpack
hot: true
},
target: 'electron-renderer', target: 'electron-renderer',
mode: 'production', mode: 'production',
devtool: "cheap-source-map",
// Enable sourcemaps for debugging webpack's output.
devtool: "source-map",
resolve: { resolve: {
// Add '.ts' and '.tsx' as resolvable extensions. // Add '.ts' and '.tsx' as resolvable extensions.
extensions: [".ts", ".tsx", ".js", ".json"] extensions: [".ts", ".tsx", ".js", ".json"]
}, },
module: { module: {
rules: [ rules: [
// All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'. // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
{ test: /\.tsx?$/, loader: "awesome-typescript-loader" }, { test: /\.tsx?$/, loader: "awesome-typescript-loader" },
// All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'. // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" }, { enforce: "pre", test: /\.js$/, loader: "source-map-loader" },
{ {
test: /\.css$/, test: /\.css$/,
use: ['style-loader', 'css-loader'], use: ['style-loader', 'css-loader'],
@@ -66,7 +66,8 @@ module.exports = {
plugins: [ plugins: [
new LiveReloadPlugin({}), new LiveReloadPlugin({}),
new HtmlWebpackPlugin({ template: './index.html', file: './build/index.html', inject: false }), new HtmlWebpackPlugin({ template: './index.html', file: './build/index.html', inject: false }),
// new BundleAnalyzerPlugin(), new BundleAnalyzerPlugin(),
new webpack.HotModuleReplacementPlugin()
], ],
// When importing a module whose path matches one of the following, just // When importing a module whose path matches one of the following, just

View File

@@ -2,7 +2,7 @@
# yarn lockfile v1 # yarn lockfile v1
"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1": "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1":
version "7.4.3" version "7.4.3"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.3.tgz#79888e452034223ad9609187a0ad1fe0d2ad4bdc" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.3.tgz#79888e452034223ad9609187a0ad1fe0d2ad4bdc"
integrity sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA== integrity sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==
@@ -14,7 +14,7 @@
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.1.tgz#9833722341379fb7d67f06a4b00ab3c37913da53" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.1.tgz#9833722341379fb7d67f06a4b00ab3c37913da53"
integrity sha512-OYpa/Sg+2GDX+jibUfpZVn1YqSVRpYmTLF2eyAfrFTIJSbwyIrc+YscayoykvaOME/wV4BV0Sa0yqdMrgse6mA== integrity sha512-OYpa/Sg+2GDX+jibUfpZVn1YqSVRpYmTLF2eyAfrFTIJSbwyIrc+YscayoykvaOME/wV4BV0Sa0yqdMrgse6mA==
"@material-ui/core@^4.0.0-alpha.1": "@material-ui/core@^4.0.0-alpha.6":
version "4.0.0-alpha.6" version "4.0.0-alpha.6"
resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.0.0-alpha.6.tgz#8f7893fe6e20035c2e502a3693cc1c10f884f93b" resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.0.0-alpha.6.tgz#8f7893fe6e20035c2e502a3693cc1c10f884f93b"
integrity sha512-X2tHOJDzuG7/TYBhmd7C+OysUpJPP0oMXKJ4MJlFwsWTAqxL2sXRIcaQVDPzgUEn34ApL4Xham3qYHGAjpCPeg== integrity sha512-X2tHOJDzuG7/TYBhmd7C+OysUpJPP0oMXKJ4MJlFwsWTAqxL2sXRIcaQVDPzgUEn34ApL4Xham3qYHGAjpCPeg==
@@ -37,46 +37,23 @@
react-transition-group "^2.5.3" react-transition-group "^2.5.3"
warning "^4.0.1" warning "^4.0.1"
"@material-ui/icons@^3.0.2": "@material-ui/icons@^4.0.0-alpha.1":
version "3.0.2" version "4.0.0-alpha.1"
resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-3.0.2.tgz#d67a6dd1ec8312d3a88ec97944a63daeef24fe10" resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.0.0-alpha.1.tgz#98e9a572a371473c90594cd2101d0cbbe74e2729"
integrity sha512-QY/3gJnObZQ3O/e6WjH+0ah2M3MOgLOzCy8HTUoUx9B6dDrS18vP7Ycw3qrDEKlB6q1KNxy6CZHm5FCauWGy2g== integrity sha512-SEQTG3k8C9NPo4ZinExSTPtte7JSRKqHYulomwePyDNqUpPrA0WkBerKbKy+V8RuEKo5MhpOfAc4KvXEUJnp2g==
dependencies: dependencies:
"@babel/runtime" "^7.2.0" "@babel/runtime" "^7.2.0"
recompose "0.28.0 - 0.30.0"
"@material-ui/lab@^3.0.0-alpha.30": "@material-ui/lab@^4.0.0-alpha.6":
version "3.0.0-alpha.30" version "4.0.0-alpha.6"
resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-3.0.0-alpha.30.tgz#c6c64d0ff2b28410a09e4009f3677499461f3df8" resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.6.tgz#06263a88b27ae58e9150a2efd99fefb34037e7f0"
integrity sha512-d8IXbkQO92Ln7f/Tzy8Q5cLi/sMWH/Uz1xrOO5NKUgg42whwyCuoT9ErddDPFNQmPi9d1C7A5AG8ONjEAbAIyQ== integrity sha512-mnnJXG7ofnEzUeIvIi2FdycFT5aN9L/zw2rAXSWnD2OnKm5EZpm3s6eiSDXLIg7Ulh+rU0yHmlVI4OVHHjPLgw==
dependencies: dependencies:
"@babel/runtime" "^7.2.0" "@babel/runtime" "^7.2.0"
"@material-ui/utils" "^3.0.0-alpha.2" "@material-ui/utils" "^4.0.0-alpha.4"
classnames "^2.2.5" clsx "^1.0.2"
keycode "^2.1.9" keycode "^2.1.9"
prop-types "^15.6.0" prop-types "^15.7.2"
"@material-ui/styles@^3.0.0-alpha.10":
version "3.0.0-alpha.10"
resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-3.0.0-alpha.10.tgz#4c28a6d6dacb1fb71aff4642f92b63232a3f298d"
integrity sha512-qJ5eiupBPRCNlMCDZ2G5h8auBtBtm8uT/oCUAJ/FqhO5oC7POLmmvDN1Cq1cgAmqQnaL6uN5mAM1Gc90GpKr9A==
dependencies:
"@babel/runtime" "^7.2.0"
"@emotion/hash" "^0.7.1"
"@material-ui/utils" "^3.0.0-alpha.2"
classnames "^2.2.5"
deepmerge "^3.0.0"
hoist-non-react-statics "^3.2.1"
jss "^10.0.0-alpha.7"
jss-plugin-camel-case "^10.0.0-alpha.7"
jss-plugin-default-unit "^10.0.0-alpha.7"
jss-plugin-global "^10.0.0-alpha.7"
jss-plugin-nested "^10.0.0-alpha.7"
jss-plugin-props-sort "^10.0.0-alpha.7"
jss-plugin-rule-value-function "^10.0.0-alpha.7"
jss-plugin-vendor-prefixer "^10.0.0-alpha.7"
prop-types "^15.6.0"
warning "^4.0.1"
"@material-ui/styles@^4.0.0-alpha.6": "@material-ui/styles@^4.0.0-alpha.6":
version "4.0.0-alpha.6" version "4.0.0-alpha.6"
@@ -110,15 +87,6 @@
prop-types "^15.6.0" prop-types "^15.6.0"
warning "^4.0.1" warning "^4.0.1"
"@material-ui/utils@^3.0.0-alpha.2":
version "3.0.0-alpha.3"
resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-3.0.0-alpha.3.tgz#836c62ea46f5ffc6f0b5ea05ab814704a86908b1"
integrity sha512-rwMdMZptX0DivkqBuC+Jdq7BYTXwqKai5G5ejPpuEDKpWzi1Oxp+LygGw329FrKpuKeiqpcymlqJTjmy+quWng==
dependencies:
"@babel/runtime" "^7.2.0"
prop-types "^15.6.0"
react-is "^16.6.3"
"@material-ui/utils@^4.0.0-alpha.4": "@material-ui/utils@^4.0.0-alpha.4":
version "4.0.0-alpha.4" version "4.0.0-alpha.4"
resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.0.0-alpha.4.tgz#3966ec0c7fc2d42594092799bf464faf3d6d8633" resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.0.0-alpha.4.tgz#3966ec0c7fc2d42594092799bf464faf3d6d8633"
@@ -138,11 +106,6 @@
resolved "https://registry.yarnpkg.com/@types/get-value/-/get-value-3.0.1.tgz#67da2663d2a632fb2ed33693479176b2841749ca" resolved "https://registry.yarnpkg.com/@types/get-value/-/get-value-3.0.1.tgz#67da2663d2a632fb2ed33693479176b2841749ca"
integrity sha512-Pla+0sjwKHH9d5aejg9hSXd+NxlKnaLutTpckENtCNTnrC+EmAsQsqhp+WJX8LgOBDDiRtiBj5kX8PwAfL+KdQ== integrity sha512-Pla+0sjwKHH9d5aejg9hSXd+NxlKnaLutTpckENtCNTnrC+EmAsQsqhp+WJX8LgOBDDiRtiBj5kX8PwAfL+KdQ==
"@types/js-base64@^2.3.1":
version "2.3.1"
resolved "https://registry.yarnpkg.com/@types/js-base64/-/js-base64-2.3.1.tgz#c39f14f129408a3d96a1105a650d8b2b6eeb4168"
integrity sha512-4RKbhIDGC87s4EBy2Cp2/5S2O6kmCRcZnD5KRCq1q9z2GhBte1+BdsfVKCpG8yKpDGNyEE2G6IqFIh6W2YwWPA==
"@types/node@*": "@types/node@*":
version "11.13.0" version "11.13.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.0.tgz#b0df8d6ef9b5001b2be3a94d909ce3c29a80f9e1" resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.0.tgz#b0df8d6ef9b5001b2be3a94d909ce3c29a80f9e1"
@@ -530,11 +493,6 @@ arraybuffer.slice@~0.0.7:
resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
asap@~2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
asn1.js@^4.0.0: asn1.js@^4.0.0:
version "4.10.1" version "4.10.1"
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
@@ -927,11 +885,6 @@ chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
escape-string-regexp "^1.0.5" escape-string-regexp "^1.0.5"
supports-color "^5.3.0" supports-color "^5.3.0"
change-emitter@^0.1.2:
version "0.1.6"
resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515"
integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=
"charenc@>= 0.0.1": "charenc@>= 0.0.1":
version "0.0.2" version "0.0.2"
resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
@@ -991,11 +944,6 @@ class-utils@^0.3.5:
isobject "^3.0.0" isobject "^3.0.0"
static-extend "^0.1.1" static-extend "^0.1.1"
classnames@^2.2.5:
version "2.2.6"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
clean-css@4.2.x: clean-css@4.2.x:
version "4.2.1" version "4.2.1"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
@@ -1200,11 +1148,6 @@ copy-text-to-clipboard@^1.0.4:
resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-1.0.4.tgz#2286ff6c53495962c5318d34746d256939069c49" resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-1.0.4.tgz#2286ff6c53495962c5318d34746d256939069c49"
integrity sha512-4hDE+0bgqm4G/nXnt91CP3rc0vOptaePPU5WfVZuhv2AYNJogdLHR4pF1XPgXDAGY4QCzj9pD7zKATa+50sQPg== integrity sha512-4hDE+0bgqm4G/nXnt91CP3rc0vOptaePPU5WfVZuhv2AYNJogdLHR4pF1XPgXDAGY4QCzj9pD7zKATa+50sQPg==
core-js@^1.0.0:
version "1.2.7"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
core-util-is@~1.0.0: core-util-is@~1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -1301,14 +1244,6 @@ css-select@^1.1.0:
domutils "1.5.1" domutils "1.5.1"
nth-check "~1.0.1" nth-check "~1.0.1"
css-vendor@^1.1.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-1.2.1.tgz#21b914913d3a68bab2708090dab2e61db7c9eaec"
integrity sha512-ZpwiWxn5jWNJ7NF3DAb/Dc/+c2lRu+fnovej/adCv3VJsULJSjdXEpUwRcq4fnpAAh98Hi7b0GDnlyoNFcdv1g==
dependencies:
"@babel/runtime" "^7.3.1"
is-in-browser "^1.0.2"
css-vendor@^2.0.1: css-vendor@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.1.tgz#1bfaad119b545287f358bdc62875c26d44b6aae0" resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.1.tgz#1bfaad119b545287f358bdc62875c26d44b6aae0"
@@ -1763,13 +1698,6 @@ encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
encoding@^0.1.11:
version "0.1.12"
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
dependencies:
iconv-lite "~0.4.13"
end-of-stream@^1.0.0, end-of-stream@^1.1.0: end-of-stream@^1.0.0, end-of-stream@^1.1.0:
version "1.4.1" version "1.4.1"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
@@ -2063,19 +1991,6 @@ faye-websocket@~0.11.1:
dependencies: dependencies:
websocket-driver ">=0.5.1" websocket-driver ">=0.5.1"
fbjs@^0.8.1:
version "0.8.17"
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
dependencies:
core-js "^1.0.0"
isomorphic-fetch "^2.1.1"
loose-envify "^1.0.0"
object-assign "^4.1.0"
promise "^7.1.1"
setimmediate "^1.0.5"
ua-parser-js "^0.7.18"
figgy-pudding@^3.5.1: figgy-pudding@^3.5.1:
version "3.5.1" version "3.5.1"
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
@@ -2442,11 +2357,6 @@ hoek@4.2.1:
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA== integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==
hoist-non-react-statics@^2.3.1:
version "2.5.5"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
hoist-non-react-statics@^3.2.1, hoist-non-react-statics@^3.3.0: hoist-non-react-statics@^3.2.1, hoist-non-react-statics@^3.3.0:
version "3.3.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b"
@@ -2562,7 +2472,7 @@ https-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3: hyphenate-style-name@^1.0.3:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48"
integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==
@@ -2574,7 +2484,7 @@ iconv-lite@0.4.23:
dependencies: dependencies:
safer-buffer ">= 2.1.2 < 3" safer-buffer ">= 2.1.2 < 3"
iconv-lite@^0.4.4, iconv-lite@~0.4.13: iconv-lite@^0.4.4:
version "0.4.24" version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -2610,6 +2520,11 @@ ignore-walk@^3.0.1:
dependencies: dependencies:
minimatch "^3.0.4" minimatch "^3.0.4"
immutable@^4.0.0-rc.12:
version "4.0.0-rc.12"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.12.tgz#ca59a7e4c19ae8d9bf74a97bdf0f6e2f2a5d0217"
integrity sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A==
import-local@^2.0.0: import-local@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
@@ -2857,7 +2772,7 @@ is-regex@^1.0.4:
dependencies: dependencies:
has "^1.0.1" has "^1.0.1"
is-stream@^1.0.1, is-stream@^1.1.0: is-stream@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
@@ -2906,14 +2821,6 @@ isobject@^3.0.0, isobject@^3.0.1:
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
isomorphic-fetch@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
dependencies:
node-fetch "^1.0.1"
whatwg-fetch ">=0.10.0"
js-base64@^2.5.1: js-base64@^2.5.1:
version "2.5.1" version "2.5.1"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121"
@@ -2963,14 +2870,6 @@ jss-plugin-camel-case@^10.0.0-alpha.16:
hyphenate-style-name "^1.0.3" hyphenate-style-name "^1.0.3"
jss "10.0.0-alpha.16" jss "10.0.0-alpha.16"
jss-plugin-camel-case@^10.0.0-alpha.7:
version "10.0.0-alpha.7"
resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0-alpha.7.tgz#7dcbd9acb6682f3102cb2d3356b4fd9642d93f17"
integrity sha512-Bwrav1ZB0XywdJW6TaEuFhKe1ZpZvUlESh3jsFOvebA9aFTYNCkmHMEqjA5+u9VMxksl3u77nnZHtukpxkzrBA==
dependencies:
"@babel/runtime" "^7.0.0"
hyphenate-style-name "^1.0.2"
jss-plugin-default-unit@^10.0.0-alpha.16: jss-plugin-default-unit@^10.0.0-alpha.16:
version "10.0.0-alpha.16" version "10.0.0-alpha.16"
resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0-alpha.16.tgz#ef96b529fcb9f8d730c14a489a1d7e71e243447e" resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0-alpha.16.tgz#ef96b529fcb9f8d730c14a489a1d7e71e243447e"
@@ -2979,13 +2878,6 @@ jss-plugin-default-unit@^10.0.0-alpha.16:
"@babel/runtime" "^7.3.1" "@babel/runtime" "^7.3.1"
jss "10.0.0-alpha.16" jss "10.0.0-alpha.16"
jss-plugin-default-unit@^10.0.0-alpha.7:
version "10.0.0-alpha.7"
resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0-alpha.7.tgz#f6dd0a03d545e7bf243c062bae3a832ac8c5ff6d"
integrity sha512-auuJUbQaWMxoHOVFPrfZNZpZm9ab8PZeDyvey8nMt2lbokkmZ53UyAnM/1kNsg5BdAXTItcLDxDB3I4gwNU84g==
dependencies:
"@babel/runtime" "^7.0.0"
jss-plugin-global@^10.0.0-alpha.16: jss-plugin-global@^10.0.0-alpha.16:
version "10.0.0-alpha.16" version "10.0.0-alpha.16"
resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.0-alpha.16.tgz#6da34ad63e0a4669a35412d716d39820bd10ede4" resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.0-alpha.16.tgz#6da34ad63e0a4669a35412d716d39820bd10ede4"
@@ -2994,13 +2886,6 @@ jss-plugin-global@^10.0.0-alpha.16:
"@babel/runtime" "^7.3.1" "@babel/runtime" "^7.3.1"
jss "10.0.0-alpha.16" jss "10.0.0-alpha.16"
jss-plugin-global@^10.0.0-alpha.7:
version "10.0.0-alpha.7"
resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.0-alpha.7.tgz#38ca390802b62da490afbaafc581552a81977729"
integrity sha512-OWeoW4szLDgRUKviST+xfilqa8O5uXJCW+O3YonheCRTRJg6rRzlE/b5pfYPoU9UtwvY9n7JvwBX5r3c1lMsEQ==
dependencies:
"@babel/runtime" "^7.0.0"
jss-plugin-nested@^10.0.0-alpha.16: jss-plugin-nested@^10.0.0-alpha.16:
version "10.0.0-alpha.16" version "10.0.0-alpha.16"
resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.0.0-alpha.16.tgz#282ce431cc6c7c4b2e2509b80dc5cc1de7f7102f" resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.0.0-alpha.16.tgz#282ce431cc6c7c4b2e2509b80dc5cc1de7f7102f"
@@ -3010,14 +2895,6 @@ jss-plugin-nested@^10.0.0-alpha.16:
jss "10.0.0-alpha.16" jss "10.0.0-alpha.16"
tiny-warning "^1.0.2" tiny-warning "^1.0.2"
jss-plugin-nested@^10.0.0-alpha.7:
version "10.0.0-alpha.7"
resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.0.0-alpha.7.tgz#03a89c8f7c1d570a3d5f16dae3e61f7f2edb0316"
integrity sha512-wsRzuIZXAc6WMjc61mREW9cUrDxgSI7dK/fx5c7a06IDUfSn+83NJ30J/RB4oBnbQW9SijV/muujz7IJqpn9Gw==
dependencies:
"@babel/runtime" "^7.0.0"
tiny-warning "^1.0.2"
jss-plugin-props-sort@^10.0.0-alpha.16: jss-plugin-props-sort@^10.0.0-alpha.16:
version "10.0.0-alpha.16" version "10.0.0-alpha.16"
resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0-alpha.16.tgz#d91566d6c73ebd906ff81fdfb93135d16bbfb067" resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0-alpha.16.tgz#d91566d6c73ebd906ff81fdfb93135d16bbfb067"
@@ -3026,13 +2903,6 @@ jss-plugin-props-sort@^10.0.0-alpha.16:
"@babel/runtime" "^7.3.1" "@babel/runtime" "^7.3.1"
jss "10.0.0-alpha.16" jss "10.0.0-alpha.16"
jss-plugin-props-sort@^10.0.0-alpha.7:
version "10.0.0-alpha.7"
resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0-alpha.7.tgz#46f1809fcae0acc048d0047aa54a4b9b6973597d"
integrity sha512-KXOCaHUk1+KXqE0z3q66/w1fDoy+VsZvI77gLxOqTsTrvIKFLX0jarwXogW3CDlaPQQFTZ6JykJJXtPRTBlstA==
dependencies:
"@babel/runtime" "^7.0.0"
jss-plugin-rule-value-function@^10.0.0-alpha.16: jss-plugin-rule-value-function@^10.0.0-alpha.16:
version "10.0.0-alpha.16" version "10.0.0-alpha.16"
resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0-alpha.16.tgz#42bf684dae0a73a02df0a3297b747becf9854449" resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0-alpha.16.tgz#42bf684dae0a73a02df0a3297b747becf9854449"
@@ -3041,13 +2911,6 @@ jss-plugin-rule-value-function@^10.0.0-alpha.16:
"@babel/runtime" "^7.3.1" "@babel/runtime" "^7.3.1"
jss "10.0.0-alpha.16" jss "10.0.0-alpha.16"
jss-plugin-rule-value-function@^10.0.0-alpha.7:
version "10.0.0-alpha.7"
resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0-alpha.7.tgz#63df1078ac361dda67996e25291d90f7226ae59a"
integrity sha512-ett83hvIM69/LknmrWndrrdiDlfLfP+rneU5qP7gTOWJ7g1P9GuEL1Tc4CWdZUWBX+T58tgIBP0V1pzWCkP0QA==
dependencies:
"@babel/runtime" "^7.0.0"
jss-plugin-vendor-prefixer@^10.0.0-alpha.16: jss-plugin-vendor-prefixer@^10.0.0-alpha.16:
version "10.0.0-alpha.16" version "10.0.0-alpha.16"
resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0-alpha.16.tgz#f59d92db7331d6615b33aa108ee54cbf1ab6ce84" resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0-alpha.16.tgz#f59d92db7331d6615b33aa108ee54cbf1ab6ce84"
@@ -3057,15 +2920,7 @@ jss-plugin-vendor-prefixer@^10.0.0-alpha.16:
css-vendor "^2.0.1" css-vendor "^2.0.1"
jss "10.0.0-alpha.16" jss "10.0.0-alpha.16"
jss-plugin-vendor-prefixer@^10.0.0-alpha.7: jss@10.0.0-alpha.16, jss@^10.0.0-alpha.16:
version "10.0.0-alpha.7"
resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0-alpha.7.tgz#caa34eb0bc39f0c98f425e174fc220d1f1a8760a"
integrity sha512-YbIVgqq+dLimOBOEYggho1Iuc0roz4PJSZYyaok9n8JnXVIqPnxYJbr8+bMbvzJ5CL3eeJij/e7L2IPCceRKrA==
dependencies:
"@babel/runtime" "^7.0.0"
css-vendor "^1.1.0"
jss@10.0.0-alpha.16, jss@^10.0.0-alpha.16, jss@^10.0.0-alpha.7:
version "10.0.0-alpha.16" version "10.0.0-alpha.16"
resolved "https://registry.yarnpkg.com/jss/-/jss-10.0.0-alpha.16.tgz#0555e8b667e08dbd2cc94f6125be5a8b8b022833" resolved "https://registry.yarnpkg.com/jss/-/jss-10.0.0-alpha.16.tgz#0555e8b667e08dbd2cc94f6125be5a8b8b022833"
integrity sha512-HmKNNnr82TR5jkWjBcbrx/uim2ief588pWp7zsf4GQpL125zRkEaWYL1SXv5bR6bBvAoTtvJsTAOxDIlLxUNZg== integrity sha512-HmKNNnr82TR5jkWjBcbrx/uim2ief588pWp7zsf4GQpL125zRkEaWYL1SXv5bR6bBvAoTtvJsTAOxDIlLxUNZg==
@@ -3526,14 +3381,6 @@ no-case@^2.2.0:
dependencies: dependencies:
lower-case "^1.1.1" lower-case "^1.1.1"
node-fetch@^1.0.1:
version "1.7.3"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
dependencies:
encoding "^0.1.11"
is-stream "^1.0.1"
node-forge@0.7.5: node-forge@0.7.5:
version "0.7.5" version "0.7.5"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df"
@@ -4087,13 +3934,6 @@ promise-inflight@^1.0.1:
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
promise@^7.1.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
dependencies:
asap "~2.0.3"
prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2:
version "15.7.2" version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
@@ -4278,12 +4118,12 @@ react-event-listener@^0.6.6:
prop-types "^15.6.0" prop-types "^15.6.0"
warning "^4.0.1" warning "^4.0.1"
react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.2: react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.2:
version "16.8.6" version "16.8.6"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: react-lifecycles-compat@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
@@ -4410,18 +4250,6 @@ readdirp@^2.2.1:
micromatch "^3.1.10" micromatch "^3.1.10"
readable-stream "^2.0.2" readable-stream "^2.0.2"
"recompose@0.28.0 - 0.30.0":
version "0.30.0"
resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0"
integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==
dependencies:
"@babel/runtime" "^7.0.0"
change-emitter "^0.1.2"
fbjs "^0.8.1"
hoist-non-react-statics "^2.3.1"
react-lifecycles-compat "^3.0.2"
symbol-observable "^1.0.4"
redux-batched-actions@^0.4.1: redux-batched-actions@^0.4.1:
version "0.4.1" version "0.4.1"
resolved "https://registry.yarnpkg.com/redux-batched-actions/-/redux-batched-actions-0.4.1.tgz#a8de8cef50a1db4f009d5222820c836515597e22" resolved "https://registry.yarnpkg.com/redux-batched-actions/-/redux-batched-actions-0.4.1.tgz#a8de8cef50a1db4f009d5222820c836515597e22"
@@ -4694,7 +4522,7 @@ set-value@^2.0.0:
is-plain-object "^2.0.3" is-plain-object "^2.0.3"
split-string "^3.0.1" split-string "^3.0.1"
setimmediate@^1.0.4, setimmediate@^1.0.5: setimmediate@^1.0.4:
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
@@ -5037,7 +4865,7 @@ supports-color@^6.1.0:
dependencies: dependencies:
has-flag "^3.0.0" has-flag "^3.0.0"
symbol-observable@^1.0.4, symbol-observable@^1.2.0: symbol-observable@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
@@ -5193,11 +5021,6 @@ typescript@^3.2.2:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.2.tgz#9ed4e6475d906f589200193be056f5913caed481" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.2.tgz#9ed4e6475d906f589200193be056f5913caed481"
integrity sha512-Og2Vn6Mk7JAuWA1hQdDQN/Ekm/SchX80VzLhjKN9ETYrIepBFAd8PkOdOTK2nKt0FCkmMZKBJvQ1dV1gIxPu/A== integrity sha512-Og2Vn6Mk7JAuWA1hQdDQN/Ekm/SchX80VzLhjKN9ETYrIepBFAd8PkOdOTK2nKt0FCkmMZKBJvQ1dV1gIxPu/A==
ua-parser-js@^0.7.18:
version "0.7.19"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz#94151be4c0a7fb1d001af7022fdaca4642659e4b"
integrity sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==
uglify-js@3.4.x: uglify-js@3.4.x:
version "3.4.10" version "3.4.10"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
@@ -5532,11 +5355,6 @@ websocket-extensions@>=0.1.1:
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==
whatwg-fetch@>=0.10.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
which-module@^2.0.0: which-module@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"

View File

@@ -1,4 +1,4 @@
import { Base64 } from 'js-base64' const Base64 = require('js-base64')
export class Base64Message { export class Base64Message {
private base64Message: string private base64Message: string

View File

@@ -12,7 +12,7 @@ export class Edge<ViewModel> implements Hashable {
this.name = name this.name = name
} }
public edges() { public edges(): Array<Edge<ViewModel>> {
return this.target ? this.target.edgeArray : [] return this.target ? this.target.edgeArray : []
} }

View File

@@ -88,11 +88,11 @@
"webdriverio": "5.4" "webdriverio": "5.4"
}, },
"dependencies": { "dependencies": {
"@types/js-base64": "^2.3.1",
"about-window": "^1.12.1", "about-window": "^1.12.1",
"electron-log": "^2.2.17", "electron-log": "^2.2.17",
"electron-telemetry": "git+https://github.com/thomasnordquist/electron-telemetry.git#dist", "electron-telemetry": "git+https://github.com/thomasnordquist/electron-telemetry.git#dist",
"electron-updater": "^4.0.6", "electron-updater": "^4.0.6",
"js-base64": "^2.5.1",
"lowdb": "^1.0.0", "lowdb": "^1.0.0",
"mqtt": "^2.18.8", "mqtt": "^2.18.8",
"sha1": "^1.1.1" "sha1": "^1.1.1"

View File

@@ -19,7 +19,7 @@ if (!isDev) {
if (typeof options.platform === 'string' && typeof options.package === 'string') { if (typeof options.platform === 'string' && typeof options.package === 'string') {
buildOptions = options buildOptions = options
} }
} catch (ignore) {} } catch (loadingBuildOptionsMayFail) {}
console.log(buildOptions) console.log(buildOptions)
const electronTelemetry = electronTelemetryFactory('9b0c8ca04a361eb8160d98c5', buildOptions) const electronTelemetry = electronTelemetryFactory('9b0c8ca04a361eb8160d98c5', buildOptions)
@@ -63,8 +63,13 @@ function createWindow() {
}) })
console.log('icon path', iconPath) console.log('icon path', iconPath)
// and load the index.html of the app.
// Load the index.html of the app.
if (isDev) {
mainWindow.loadURL('http://localhost:8080')
} else {
mainWindow.loadFile('app/build/index.html') mainWindow.loadFile('app/build/index.html')
}
// Emitted when the window is closed. // Emitted when the window is closed.
mainWindow.on('close', () => { mainWindow.on('close', () => {

View File

@@ -10,6 +10,8 @@
"indent": [true, "spaces", 2], "indent": [true, "spaces", 2],
"import-name": false, "import-name": false,
"no-submodule-imports": false, "no-submodule-imports": false,
"array-type": [true, "generic"],
"prefer-array-literal": false,
"variable-name": [true, "ban-keywords", "check-format", "allow-pascal-case"], "variable-name": [true, "ban-keywords", "check-format", "allow-pascal-case"],
"trailing-comma": [ "trailing-comma": [
true, true,

View File

@@ -126,11 +126,6 @@
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
"@types/js-base64@^2.3.1":
version "2.3.1"
resolved "https://registry.yarnpkg.com/@types/js-base64/-/js-base64-2.3.1.tgz#c39f14f129408a3d96a1105a650d8b2b6eeb4168"
integrity sha512-4RKbhIDGC87s4EBy2Cp2/5S2O6kmCRcZnD5KRCq1q9z2GhBte1+BdsfVKCpG8yKpDGNyEE2G6IqFIh6W2YwWPA==
"@types/lodash@*": "@types/lodash@*":
version "4.14.121" version "4.14.121"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.121.tgz#9327e20d49b95fc2bf983fc2f045b2c6effc80b9" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.121.tgz#9327e20d49b95fc2bf983fc2f045b2c6effc80b9"
@@ -2090,6 +2085,11 @@ istanbul-reports@^2.0.1:
dependencies: dependencies:
handlebars "^4.0.11" handlebars "^4.0.11"
js-base64@^2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121"
integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==
js-tokens@^3.0.2: js-tokens@^3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"