diff --git a/app/index.html b/app/index.html index 19bc6f7..d3f5046 100644 --- a/app/index.html +++ b/app/index.html @@ -1,100 +1,99 @@ - - MQTT Explorer - + + MQTT Explorer + - - + - +
diff --git a/app/package.json b/app/package.json index 5124394..c26aab6 100644 --- a/app/package.json +++ b/app/package.json @@ -9,15 +9,16 @@ "author": "", "license": "ISC", "dependencies": { - "@material-ui/core": "^4.0.0-alpha.1", - "@material-ui/icons": "^3.0.2", - "@material-ui/lab": "^3.0.0-alpha.30", - "@material-ui/styles": "^3.0.0-alpha.10", + "@material-ui/core": "^4.0.0-alpha.6", + "@material-ui/icons": "^4.0.0-alpha.1", + "@material-ui/lab": "^4.0.0-alpha.6", + "@material-ui/styles": "^4.0.0-alpha.6", "compare-versions": "^3.4.0", "copy-text-to-clipboard": "^1.0.4", "diff": "^4.0.1", "electron-telemetry": "git+https://github.com/thomasnordquist/electron-telemetry.git#dist", "get-value": "^3.0.1", + "immutable": "^4.0.0-rc.12", "js-base64": "^2.5.1", "json-to-ast": "^2.1.0", "lodash.debounce": "^4.0.8", @@ -43,7 +44,6 @@ "devDependencies": { "@types/diff": "^4.0.1", "@types/get-value": "^3.0.1", - "@types/js-base64": "^2.3.1", "@types/node": "^10.12.18", "@types/prismjs": "^1.9.1", "@types/react": "^16.7.18", diff --git a/app/rings.svg b/app/rings.svg deleted file mode 100644 index ad9cb74..0000000 --- a/app/rings.svg +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/actions/Connection.ts b/app/src/actions/Connection.ts index 498d54a..7b16ae6 100644 --- a/app/src/actions/Connection.ts +++ b/app/src/actions/Connection.ts @@ -7,7 +7,7 @@ import { Dispatch } from 'redux' import { globalActions } from '.' import { showError } from './Global' import { showTree } from './Tree' -import { TopicViewModel } from '../TopicViewModel' +import { TopicViewModel } from '../model/TopicViewModel' import { addMqttConnectionEvent, makeConnectionStateEvent, @@ -60,18 +60,18 @@ const updateHealth = (dataSourceState: DataSourceState) => (dispatch: Dispatch, host: string) => Action = (tree: q.Tree, host: string) => ({ +export const connected: (tree: q.Tree, host: string) => Action = (tree: q.Tree, host: string) => ({ tree, host, type: ActionTypes.CONNECTION_SET_CONNECTED, }) -export const connecting: (connectionId: string) => Action = (connectionId: string) => ({ +export const connecting: (connectionId: string) => Action = (connectionId: string) => ({ connectionId, type: ActionTypes.CONNECTION_SET_CONNECTING, }) -export const disconnect = () => (dispatch: Dispatch, getState: () => AppState) => { +export const disconnect = () => (dispatch: Dispatch, getState: () => AppState) => { const { connectionId, tree } = getState().connection if (connectionId) { rendererEvents.emit(removeConnection, connectionId) diff --git a/app/src/actions/ConnectionManager.ts b/app/src/actions/ConnectionManager.ts index 10d2d22..a2bbacb 100644 --- a/app/src/actions/ConnectionManager.ts +++ b/app/src/actions/ConnectionManager.ts @@ -1,7 +1,7 @@ import { AppState } from '../reducers' import { clearLegacyConnectionOptions, loadLegacyConnectionOptions } from '../model/LegacyConnectionSettings' 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 { showError } from './Global' import { remote } from 'electron' diff --git a/app/src/actions/Settings.ts b/app/src/actions/Settings.ts index 00ebd92..638a666 100644 --- a/app/src/actions/Settings.ts +++ b/app/src/actions/Settings.ts @@ -2,11 +2,11 @@ import * as q from '../../../backend/src/Model' import { AppState } from '../reducers' import { autoExpandLimitSet } from '../components/SettingsDrawer/Settings' 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 { showError } from './Global' import { showTree } from './Tree' -import { TopicViewModel } from '../TopicViewModel' +import { TopicViewModel } from '../model/TopicViewModel' import { ActionTypes, SettingsState, @@ -19,7 +19,7 @@ const settingsIdentifier: StorageIdentifier> = { id: 'Settings', } -export const loadSettings = () => async (dispatch: Dispatch, _getState: () => AppState) => { +export const loadSettings = () => async (dispatch: Dispatch) => { try { const settings = await persistentStorage.load(settingsIdentifier) dispatch({ @@ -32,7 +32,7 @@ export const loadSettings = () => async (dispatch: Dispatch, _getState: () dispatch(globalActions.didLaunch()) } -export const storeSettings = () => async (dispatch: Dispatch, getState: () => AppState) => { +export const storeSettings = () => async (dispatch: Dispatch, getState: () => AppState) => { const settings = { ...getState().settings, topicFilter: undefined, @@ -46,7 +46,7 @@ export const storeSettings = () => async (dispatch: Dispatch, getState: () } } -export const setAutoExpandLimit = (autoExpandLimit: number = 0) => (dispatch: Dispatch, getState: () => AppState) => { +export const setAutoExpandLimit = (autoExpandLimit: number = 0) => (dispatch: Dispatch) => { dispatch({ autoExpandLimit, type: ActionTypes.SETTINGS_SET_AUTO_EXPAND_LIMIT, @@ -54,15 +54,15 @@ export const setAutoExpandLimit = (autoExpandLimit: number = 0) => (dispatch: Di dispatch(storeSettings()) } -export const selectTopicWithMouseOver = (selectTopicWithMouseOver: boolean) => (dispatch: Dispatch, getState: () => AppState) => { +export const selectTopicWithMouseOver = (doSelect: boolean) => (dispatch: Dispatch) => { dispatch({ - selectTopicWithMouseOver, + selectTopicWithMouseOver: doSelect, type: ActionTypes.SETTINGS_SET_SELECT_TOPIC_WITH_MOUSE_OVER, }) dispatch(storeSettings()) } -export const setValueDisplayMode = (valueRendererDisplayMode: 'diff' | 'raw') => (dispatch: Dispatch, getState: () => AppState) => { +export const setValueDisplayMode = (valueRendererDisplayMode: 'diff' | 'raw') => (dispatch: Dispatch) => { dispatch({ valueRendererDisplayMode, type: ActionTypes.SETTINGS_SET_VALUE_RENDERER_DISPLAY_MODE, @@ -70,21 +70,21 @@ export const setValueDisplayMode = (valueRendererDisplayMode: 'diff' | 'raw') => dispatch(storeSettings()) } -export const toggleSettingsVisibility = () => (dispatch: Dispatch, _getState: () => AppState) => { +export const toggleSettingsVisibility = () => (dispatch: Dispatch) => { dispatch({ type: ActionTypes.SETTINGS_TOGGLE_VISIBILITY, }) dispatch(storeSettings()) } -export const toggleHighlightTopicUpdates = () => (dispatch: Dispatch, _getState: () => AppState) => { +export const toggleHighlightTopicUpdates = () => (dispatch: Dispatch) => { dispatch({ type: ActionTypes.SETTINGS_TOGGLE_HIGHLIGHT_ACTIVITY, }) dispatch(storeSettings()) } -export const setTopicOrder = (topicOrder: TopicOrder = TopicOrder.none) => (dispatch: Dispatch, _getState: () => AppState) => { +export const setTopicOrder = (topicOrder: TopicOrder = TopicOrder.none) => (dispatch: Dispatch) => { dispatch({ topicOrder, type: ActionTypes.SETTINGS_SET_TOPIC_ORDER, @@ -92,7 +92,7 @@ export const setTopicOrder = (topicOrder: TopicOrder = TopicOrder.none) => (disp dispatch(storeSettings()) } -export const filterTopics = (filterStr: string) => (dispatch: Dispatch, getState: () => AppState) => { +export const filterTopics = (filterStr: string) => (dispatch: Dispatch, getState: () => AppState) => { const { tree } = getState().connection dispatch({ diff --git a/app/src/actions/Tree.ts b/app/src/actions/Tree.ts index 5689971..655ba75 100644 --- a/app/src/actions/Tree.ts +++ b/app/src/actions/Tree.ts @@ -4,14 +4,14 @@ import { AnyAction, Dispatch } from 'redux' import { AppState } from '../reducers' import { batchActions } from 'redux-batched-actions' import { setTopic } from './Publish' -import { TopicViewModel } from '../TopicViewModel' +import { TopicViewModel } from '../model/TopicViewModel' const debounce = require('lodash.debounce') -export const selectTopic = (topic: q.TreeNode) => (dispatch: Dispatch, getState: () => AppState) => { +export const selectTopic = (topic: q.TreeNode) => (dispatch: Dispatch, getState: () => AppState) => { debouncedSelectTopic(topic, dispatch, getState) } -const debouncedSelectTopic = debounce((topic: q.TreeNode, dispatch: Dispatch, getState: () => AppState) => { +const debouncedSelectTopic = debounce((topic: q.TreeNode, dispatch: Dispatch, getState: () => AppState) => { const { selectedTopic } = getState().tree if (selectedTopic === topic) { return @@ -43,7 +43,7 @@ const debouncedSelectTopic = debounce((topic: q.TreeNode, dispat } }, 70) -export const showTree = (tree?: q.Tree) => (dispatch: Dispatch, getState: () => AppState): AnyAction => { +export const showTree = (tree?: q.Tree) => (dispatch: Dispatch, getState: () => AppState): AnyAction => { const visibleTree = getState().tree.tree const connectionTree = getState().connection.tree @@ -58,10 +58,8 @@ export const showTree = (tree?: q.Tree) => (dispatch: Dispatch) => (dispatch: Dispatch, getState: () => AppState): AnyAction => { +export const togglePause = (tree?: q.Tree) => (dispatch: Dispatch, getState: () => AppState): AnyAction => { const paused = getState().tree.paused - const tree = getState().tree.tree - // tree && tree.applyUnmergedChanges() return dispatch({ type: paused ? ActionTypes.TREE_RESUME_UPDATES : ActionTypes.TREE_PAUSE_UPDATES, diff --git a/app/src/App.tsx b/app/src/components/App.tsx similarity index 86% rename from app/src/App.tsx rename to app/src/components/App.tsx index 004ffe6..15952e1 100644 --- a/app/src/App.tsx +++ b/app/src/components/App.tsx @@ -1,21 +1,18 @@ import * as React from 'react' -import ConnectionSetup from './components/ConnectionSetup/ConnectionSetup' +import ConnectionSetup from './ConnectionSetup/ConnectionSetup' import CssBaseline from '@material-ui/core/CssBaseline' import ErrorBoundary from './ErrorBoundary' -import Notification from './components/Notification' -import Sidebar from './components/Sidebar/Sidebar' -import TitleBar from './components/TitleBar' -import Tree from './components/Tree/Tree' -import UpdateNotifier from './UpdateNotifier' -import { AppState } from './reducers' +import Notification from './Layout/Notification' +import TitleBar from './Layout/TitleBar' +import UpdateNotifier from '../UpdateNotifier' +import { AppState } from '../reducers' import { bindActionCreators } from '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' -const Settings = React.lazy(() => import('./components/SettingsDrawer/Settings')) -const ContentView = React.lazy(() => import('./components/ContentView')) +const Settings = React.lazy(() => import('./SettingsDrawer/Settings')) +const ContentView = React.lazy(() => import('./Layout/ContentView')) interface Props { connectionId: string diff --git a/app/src/ErrorBoundary.tsx b/app/src/components/ErrorBoundary.tsx similarity index 98% rename from app/src/ErrorBoundary.tsx rename to app/src/components/ErrorBoundary.tsx index 72d6392..f235aa6 100644 --- a/app/src/ErrorBoundary.tsx +++ b/app/src/components/ErrorBoundary.tsx @@ -1,5 +1,5 @@ import * as React from 'react' -import PersistentStorage from './PersistentStorage' +import PersistentStorage from '../utils/PersistentStorage' import SentimentDissatisfied from '@material-ui/icons/SentimentDissatisfied' import Warning from '@material-ui/icons/Warning' import { electronRendererTelementry } from 'electron-telemetry' diff --git a/app/src/components/ContentView.tsx b/app/src/components/Layout/ContentView.tsx similarity index 91% rename from app/src/components/ContentView.tsx rename to app/src/components/Layout/ContentView.tsx index a579ff7..cb27c1f 100644 --- a/app/src/components/ContentView.tsx +++ b/app/src/components/Layout/ContentView.tsx @@ -1,7 +1,7 @@ import * as React from 'react' import ReactSplitPane from 'react-split-pane' -import { Sidebar } from './Sidebar' -import Tree from './Tree/Tree' +import { Sidebar } from '../Sidebar' +import Tree from '../Tree/Tree' export default function ContentView(props: {heightProperty: any, paneDefaults: any, connectionId: any}) { return ( diff --git a/app/src/components/Notification.tsx b/app/src/components/Layout/Notification.tsx similarity index 100% rename from app/src/components/Notification.tsx rename to app/src/components/Layout/Notification.tsx diff --git a/app/src/components/PauseButton.tsx b/app/src/components/Layout/PauseButton.tsx similarity index 92% rename from app/src/components/PauseButton.tsx rename to app/src/components/Layout/PauseButton.tsx index d4328b9..d534897 100644 --- a/app/src/components/PauseButton.tsx +++ b/app/src/components/Layout/PauseButton.tsx @@ -1,12 +1,12 @@ import * as React from 'react' -import * as q from '../../../backend/src/Model' -import CustomIconButton from './CustomIconButton' +import * as q from '../../../../backend/src/Model' +import CustomIconButton from '../helper/CustomIconButton' import Pause from '@material-ui/icons/PauseCircleFilled' import Resume from '@material-ui/icons/PlayCircleFilled' -import { AppState } from '../reducers' +import { AppState } from '../../reducers' import { bindActionCreators } from 'redux' import { connect } from 'react-redux' -import { treeActions } from '../actions' +import { treeActions } from '../../actions' import { StyleRulesCallback, withStyles } from '@material-ui/core/styles' import { Tooltip } from '@material-ui/core' diff --git a/app/src/components/TitleBar.tsx b/app/src/components/Layout/TitleBar.tsx similarity index 95% rename from app/src/components/TitleBar.tsx rename to app/src/components/Layout/TitleBar.tsx index 66ccf89..1f0bc2a 100644 --- a/app/src/components/TitleBar.tsx +++ b/app/src/components/Layout/TitleBar.tsx @@ -1,13 +1,13 @@ import * as React from 'react' -import ClearAdornment from './helper/ClearAdornment' +import ClearAdornment from '../helper/ClearAdornment' 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 Search from '@material-ui/icons/Search' -import { AppState } from '../reducers' +import { AppState } from '../../reducers' import { bindActionCreators } from '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 { StyleRulesCallback, withStyles } from '@material-ui/core/styles' import { diff --git a/app/src/components/SettingsDrawer/BrokerStatistics.tsx b/app/src/components/SettingsDrawer/BrokerStatistics.tsx index 05e8ad7..e929e4e 100644 --- a/app/src/components/SettingsDrawer/BrokerStatistics.tsx +++ b/app/src/components/SettingsDrawer/BrokerStatistics.tsx @@ -3,7 +3,7 @@ import * as React from 'react' import { AppState } from '../../reducers' import { connect } from 'react-redux' import { StyleRulesCallback, withStyles } from '@material-ui/core/styles' -import { TopicViewModel } from '../../TopicViewModel' +import { TopicViewModel } from '../../model/TopicViewModel' import { Typography } from '@material-ui/core' import { Base64Message } from '../../../../backend/src/Model/Base64Message' import teal from '@material-ui/core/colors/teal' diff --git a/app/src/components/CodeBlockColors.ts b/app/src/components/Sidebar/CodeBlockColors.ts similarity index 100% rename from app/src/components/CodeBlockColors.ts rename to app/src/components/Sidebar/CodeBlockColors.ts diff --git a/app/src/components/Sidebar/CodeDiff.tsx b/app/src/components/Sidebar/CodeDiff.tsx index ab057e2..568f759 100644 --- a/app/src/components/Sidebar/CodeDiff.tsx +++ b/app/src/components/Sidebar/CodeDiff.tsx @@ -4,7 +4,7 @@ import * as React from 'react' import { Theme, withStyles } from '@material-ui/core' import 'prismjs/components/prism-json' import 'prismjs/themes/prism-tomorrow.css' -import { CodeBlockColors } from '../CodeBlockColors' +import { CodeBlockColors } from './CodeBlockColors' interface Props { previous: string diff --git a/app/src/components/Sidebar/NodeStats.tsx b/app/src/components/Sidebar/NodeStats.tsx index 31257d3..5e60902 100644 --- a/app/src/components/Sidebar/NodeStats.tsx +++ b/app/src/components/Sidebar/NodeStats.tsx @@ -1,6 +1,6 @@ import * as q from '../../../../backend/src/Model' import * as React from 'react' -import { TopicViewModel } from '../../TopicViewModel' +import { TopicViewModel } from '../../model/TopicViewModel' import { Typography } from '@material-ui/core' interface Props { diff --git a/app/src/components/Sidebar/Publish/Publish.tsx b/app/src/components/Sidebar/Publish/Publish.tsx index 0765440..5ec3211 100644 --- a/app/src/components/Sidebar/Publish/Publish.tsx +++ b/app/src/components/Sidebar/Publish/Publish.tsx @@ -36,7 +36,7 @@ import { bindActionCreators } from 'redux' import { connect } from 'react-redux' import { publishActions, globalActions } from '../../../actions' import ClearAdornment from '../../helper/ClearAdornment' -import { TopicViewModel } from '../../../TopicViewModel' +import { TopicViewModel } from '../../../model/TopicViewModel' interface Props { node?: q.TreeNode @@ -345,4 +345,4 @@ const mapStateToProps = (state: AppState) => { } } -export default withTheme(connect(mapStateToProps, mapDispatchToProps)(Publish)) +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(Publish)) diff --git a/app/src/components/Sidebar/Sidebar.tsx b/app/src/components/Sidebar/Sidebar.tsx index b16cc4d..794e097 100644 --- a/app/src/components/Sidebar/Sidebar.tsx +++ b/app/src/components/Sidebar/Sidebar.tsx @@ -1,7 +1,7 @@ import * as q from '../../../../backend/src/Model' import * as React from 'react' import Copy from '../helper/Copy' -import CustomIconButton from '../CustomIconButton' +import CustomIconButton from '../helper/CustomIconButton' import Delete from '@material-ui/icons/Delete' import ExpandMore from '@material-ui/icons/ExpandMore' import NodeStats from './NodeStats' @@ -12,7 +12,7 @@ import { bindActionCreators } from 'redux' import { connect } from 'react-redux' import { settingsActions, sidebarActions } from '../../actions' import { StyleRulesCallback, Theme, withStyles } from '@material-ui/core/styles' -import { TopicViewModel } from '../../TopicViewModel' +import { TopicViewModel } from '../../model/TopicViewModel' import { ExpansionPanel, diff --git a/app/src/components/Sidebar/Topic.tsx b/app/src/components/Sidebar/Topic.tsx index 9208340..8306d2e 100644 --- a/app/src/components/Sidebar/Topic.tsx +++ b/app/src/components/Sidebar/Topic.tsx @@ -5,7 +5,7 @@ import { withStyles, Theme, StyleRulesCallback } from '@material-ui/core/styles' import { treeActions } from '../../actions' import { bindActionCreators } from 'redux' import { connect } from 'react-redux' -import { TopicViewModel } from '../../TopicViewModel' +import { TopicViewModel } from '../../model/TopicViewModel' interface Props { classes: any diff --git a/app/src/components/Sidebar/ValueRenderer/MessageHistory.tsx b/app/src/components/Sidebar/ValueRenderer/MessageHistory.tsx index 0ac06e8..9a2fc32 100644 --- a/app/src/components/Sidebar/ValueRenderer/MessageHistory.tsx +++ b/app/src/components/Sidebar/ValueRenderer/MessageHistory.tsx @@ -3,7 +3,7 @@ import * as React from 'react' import BarChart from '@material-ui/icons/BarChart' import DateFormatter from '../../helper/DateFormatter' import History from '../History' -import { TopicViewModel } from '../../../TopicViewModel' +import { TopicViewModel } from '../../../model/TopicViewModel' import { Base64Message } from '../../../../../backend/src/Model/Base64Message' const PlotHistory = React.lazy(() => import('./PlotHistory')) diff --git a/app/src/components/Tree/Tree.tsx b/app/src/components/Tree/Tree.tsx index a1aacd0..e83e721 100644 --- a/app/src/components/Tree/Tree.tsx +++ b/app/src/components/Tree/Tree.tsx @@ -5,7 +5,7 @@ import { AppState } from '../../reducers' import { bindActionCreators } from 'redux' import { connect } from 'react-redux' import { TopicOrder } from '../../reducers/Settings' -import { TopicViewModel } from '../../TopicViewModel' +import { TopicViewModel } from '../../model/TopicViewModel' import { treeActions } from '../../actions' const MovingAverage = require('moving-average') diff --git a/app/src/components/Tree/TreeNode.tsx b/app/src/components/Tree/TreeNode.tsx index fb1d542..549a935 100644 --- a/app/src/components/Tree/TreeNode.tsx +++ b/app/src/components/Tree/TreeNode.tsx @@ -4,7 +4,7 @@ import TreeNodeSubnodes from './TreeNodeSubnodes' import TreeNodeTitle from './TreeNodeTitle' import { Theme, withStyles } from '@material-ui/core/styles' import { TopicOrder } from '../../reducers/Settings' -import { TopicViewModel } from '../../TopicViewModel' +import { TopicViewModel } from '../../model/TopicViewModel' const debounce = require('lodash.debounce') diff --git a/app/src/components/Tree/TreeNodeSubnodes.tsx b/app/src/components/Tree/TreeNodeSubnodes.tsx index a3995b1..ac4432c 100644 --- a/app/src/components/Tree/TreeNodeSubnodes.tsx +++ b/app/src/components/Tree/TreeNodeSubnodes.tsx @@ -4,7 +4,7 @@ import * as q from '../../../../backend/src/Model' import TreeNode from './TreeNode' import { TopicOrder } from '../../reducers/Settings' import { Theme, withStyles } from '@material-ui/core' -import { TopicViewModel } from '../../TopicViewModel' +import { TopicViewModel } from '../../model/TopicViewModel' export interface Props { animateChanges: boolean diff --git a/app/src/components/Tree/TreeNodeTitle.tsx b/app/src/components/Tree/TreeNodeTitle.tsx index 3437fb6..d5e36b7 100644 --- a/app/src/components/Tree/TreeNodeTitle.tsx +++ b/app/src/components/Tree/TreeNodeTitle.tsx @@ -2,7 +2,7 @@ import * as React from 'react' import { connect } from 'react-redux' import * as q from '../../../../backend/src/Model' import { withStyles, Theme } from '@material-ui/core' -import { TopicViewModel } from '../../TopicViewModel' +import { TopicViewModel } from '../../model/TopicViewModel' import { Base64Message } from '../../../../backend/src/Model/Base64Message' const debounce = require('lodash.debounce') diff --git a/app/src/components/helper/Copy.tsx b/app/src/components/helper/Copy.tsx index b923a40..332c6ee 100644 --- a/app/src/components/helper/Copy.tsx +++ b/app/src/components/helper/Copy.tsx @@ -1,6 +1,6 @@ import * as React from 'react' import Check from '@material-ui/icons/Check' -import CustomIconButton from '../CustomIconButton' +import CustomIconButton from './CustomIconButton' import FileCopy from '@material-ui/icons/FileCopy' import green from '@material-ui/core/colors/green' import { Snackbar, SnackbarContent, Tooltip } from '@material-ui/core' diff --git a/app/src/components/CustomIconButton.tsx b/app/src/components/helper/CustomIconButton.tsx similarity index 100% rename from app/src/components/CustomIconButton.tsx rename to app/src/components/helper/CustomIconButton.tsx diff --git a/app/src/index.tsx b/app/src/index.tsx index 29b2469..0bf454e 100644 --- a/app/src/index.tsx +++ b/app/src/index.tsx @@ -1,18 +1,18 @@ import * as React from 'react' import * as ReactDOM from 'react-dom' import amber from '@material-ui/core/colors/amber' -import App from './App' +import App from './components/App' import Demo from './components/Demo' import reducers, { AppState } from './reducers' import reduxThunk from 'redux-thunk' +import brown from '@material-ui/core/colors/brown' import teal from '@material-ui/core/colors/teal' import { applyMiddleware, compose, createStore } from 'redux' import { batchDispatchMiddleware } from 'redux-batched-actions' import { connect, Provider } from 'react-redux' import { createMuiTheme, Theme } from '@material-ui/core/styles' import { ThemeProvider } from '@material-ui/styles' -import './tracking' - +import './utils/tracking' const composeEnhancers = /*(window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || */ compose const store = createStore( @@ -42,6 +42,7 @@ function createTheme(type: 'light' | 'dark') { primary: { main: '#931e2e', }, + // primary: brown, secondary: amber, // error: red, action: { diff --git a/app/src/TopicViewModel.ts b/app/src/model/TopicViewModel.ts similarity index 87% rename from app/src/TopicViewModel.ts rename to app/src/model/TopicViewModel.ts index bf46bbd..c245aab 100644 --- a/app/src/TopicViewModel.ts +++ b/app/src/model/TopicViewModel.ts @@ -1,4 +1,4 @@ -import { EventDispatcher } from '../../events' +import { EventDispatcher } from '../../../events' export class TopicViewModel { private selected: boolean diff --git a/app/src/reducers/Connection.ts b/app/src/reducers/Connection.ts index 0c5b8dd..721ba35 100644 --- a/app/src/reducers/Connection.ts +++ b/app/src/reducers/Connection.ts @@ -2,7 +2,7 @@ import * as q from '../../../backend/src/Model' import { Action } from 'redux' import { createReducer } from './lib' import { MqttOptions } from '../../../backend/src/DataSource' -import { TopicViewModel } from '../TopicViewModel' +import { TopicViewModel } from '../model/TopicViewModel' export type ConnectionHealth = 'offline' | 'online' | 'connecting' export interface ConnectionState { diff --git a/app/src/reducers/Tree.ts b/app/src/reducers/Tree.ts index f308fce..ecf5ade 100644 --- a/app/src/reducers/Tree.ts +++ b/app/src/reducers/Tree.ts @@ -1,7 +1,7 @@ import * as q from '../../../backend/src/Model' import { Action } from 'redux' import { createReducer } from './lib' -import { TopicViewModel } from '../TopicViewModel' +import { TopicViewModel } from '../model/TopicViewModel' export interface TreeState { tree?: q.Tree diff --git a/app/src/reducers/index.ts b/app/src/reducers/index.ts index e392772..2500ec8 100644 --- a/app/src/reducers/index.ts +++ b/app/src/reducers/index.ts @@ -3,7 +3,7 @@ import { connectionManagerReducer, ConnectionManagerState } from './ConnectionMa import { connectionReducer, ConnectionState } from './Connection' import { publishReducer, PublishState } from './Publish' import { settingsReducer, SettingsState } from './Settings' -import { trackEvent } from '../tracking' +import { trackEvent } from '../utils/tracking' import { treeReducer, TreeState } from './Tree' export enum ActionTypes { @@ -50,30 +50,30 @@ const globalState: Reducer = (state = ini switch (action.type) { case ActionTypes.showUpdateNotification: return { - ...state, - showUpdateNotification: action.showUpdateNotification, - } + ...state, + showUpdateNotification: action.showUpdateNotification, + } case ActionTypes.showError: return { - ...state, - error: action.error, - } + ...state, + error: action.error, + } case ActionTypes.didLaunch: return { - ...state, - launching: false, - } + ...state, + launching: false, + } case ActionTypes.showUpdateDetails: if (action.showUpdateDetails === undefined) { - return state - } + return state + } return { - ...state, - showUpdateDetails: action.showUpdateDetails, - } + ...state, + showUpdateDetails: action.showUpdateDetails, + } default: return state diff --git a/app/src/tracking.ts b/app/src/tracking.ts deleted file mode 100644 index bee50ca..0000000 --- a/app/src/tracking.ts +++ /dev/null @@ -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) -} diff --git a/app/src/PersistentStorage.ts b/app/src/utils/PersistentStorage.ts similarity index 96% rename from app/src/PersistentStorage.ts rename to app/src/utils/PersistentStorage.ts index bb42a57..616e1c7 100644 --- a/app/src/PersistentStorage.ts +++ b/app/src/utils/PersistentStorage.ts @@ -1,4 +1,4 @@ -import { rendererEvents } from '../../events' +import { rendererEvents } from '../../../events' import { v4 } from 'uuid' import { @@ -7,7 +7,7 @@ import { storageLoadEvent, storageClearEvent, makeStorageAcknowledgementEvent, -} from '../../events/StorageEvents' +} from '../../../events/StorageEvents' export interface StorageIdentifier { id: string diff --git a/app/src/bugtracking.ts b/app/src/utils/bugtracking.ts similarity index 70% rename from app/src/bugtracking.ts rename to app/src/utils/bugtracking.ts index df7166e..0774a7f 100644 --- a/app/src/bugtracking.ts +++ b/app/src/utils/bugtracking.ts @@ -1,4 +1,4 @@ import { electronRendererTelementry } from 'electron-telemetry' -const spareMeFromGc = electronRendererTelementry +const telemetry = electronRendererTelementry electronRendererTelementry.registerErrorHandler() diff --git a/app/src/utils/tracking.ts b/app/src/utils/tracking.ts new file mode 100644 index 0000000..b882b75 --- /dev/null +++ b/app/src/utils/tracking.ts @@ -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) +} diff --git a/app/webpack.config.js b/app/webpack.config.js index afe1d6e..f8ded94 100644 --- a/app/webpack.config.js +++ b/app/webpack.config.js @@ -1,80 +1,81 @@ const LiveReloadPlugin = require('webpack-livereload-plugin'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const HtmlWebpackPlugin = require('html-webpack-plugin') +const webpack = require('webpack'); + module.exports = { - entry: { - app: "./src/index.tsx", - bugtracking: "./src/bugtracking.ts", - }, - output: { - chunkFilename: '[name].bundle.js', - filename: "[name].bundle.js", - path: __dirname + "/build" - }, - optimization: { - splitChunks: { - chunks: 'async', - minSize: 30000, - maxSize: 0, - minChunks: 1, - maxAsyncRequests: 5, - maxInitialRequests: 3, - automaticNameDelimiter: '~', - name: true, - cacheGroups: { - vendors: { - test: /[\\/]node_modules[\\/]/, - priority: -10 - }, - default: { - minChunks: 2, - priority: -20, - reuseExistingChunk: true - } - } - } - }, - - target: 'electron-renderer', - - mode: 'production', - - // Enable sourcemaps for debugging webpack's output. - devtool: "source-map", - - resolve: { - // Add '.ts' and '.tsx' as resolvable extensions. - extensions: [".ts", ".tsx", ".js", ".json"] - }, - - module: { - rules: [ - // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'. - { test: /\.tsx?$/, loader: "awesome-typescript-loader" }, - - // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'. - { enforce: "pre", test: /\.js$/, loader: "source-map-loader" }, - - { - test: /\.css$/, - use: ['style-loader', 'css-loader'], - }, - ] - }, - - plugins: [ - new LiveReloadPlugin({}), - new HtmlWebpackPlugin({ template: './index.html', file: './build/index.html', inject: false }), - // new BundleAnalyzerPlugin(), - ], - - // When importing a module whose path matches one of the following, just - // assume a corresponding global variable exists and use that instead. - // This is important because it allows us to avoid bundling all of our - // dependencies, which allows browsers to cache those libraries between builds. - externals: { - // "react": "React", - // "react-dom": "ReactDOM" + entry: { + app: "./src/index.tsx", + bugtracking: "./src/utils/bugtracking.ts", + }, + output: { + chunkFilename: '[name].bundle.js', + filename: "[name].bundle.js", + path: __dirname + "/build" + }, + optimization: { + splitChunks: { + chunks: 'all', + minSize: 30000, + maxSize: 0, + minChunks: 1, + maxAsyncRequests: 5, + maxInitialRequests: 3, + automaticNameDelimiter: '~', + name: true, + cacheGroups: { + vendors: { + 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 + }, + default: { + minChunks: 2, + priority: -20, + reuseExistingChunk: true + } + } } + }, + devServer: { + // contentBase: './dist', // content not from webpack + hot: true + }, + target: 'electron-renderer', + mode: 'production', + devtool: "cheap-source-map", + resolve: { + // Add '.ts' and '.tsx' as resolvable extensions. + extensions: [".ts", ".tsx", ".js", ".json"] + }, + module: { + rules: [ + // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'. + { test: /\.tsx?$/, loader: "awesome-typescript-loader" }, + // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'. + { enforce: "pre", test: /\.js$/, loader: "source-map-loader" }, + { + test: /\.css$/, + use: ['style-loader', 'css-loader'], + }, + ] + }, + + plugins: [ + new LiveReloadPlugin({}), + new HtmlWebpackPlugin({ template: './index.html', file: './build/index.html', inject: false }), + new BundleAnalyzerPlugin(), + new webpack.HotModuleReplacementPlugin() + ], + + // When importing a module whose path matches one of the following, just + // assume a corresponding global variable exists and use that instead. + // This is important because it allows us to avoid bundling all of our + // dependencies, which allows browsers to cache those libraries between builds. + externals: { + // "react": "React", + // "react-dom": "ReactDOM" + } }; diff --git a/app/yarn.lock b/app/yarn.lock index d600b28..3d3c934 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -2,7 +2,7 @@ # 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" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.3.tgz#79888e452034223ad9609187a0ad1fe0d2ad4bdc" integrity sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA== @@ -14,7 +14,7 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.1.tgz#9833722341379fb7d67f06a4b00ab3c37913da53" 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" resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.0.0-alpha.6.tgz#8f7893fe6e20035c2e502a3693cc1c10f884f93b" integrity sha512-X2tHOJDzuG7/TYBhmd7C+OysUpJPP0oMXKJ4MJlFwsWTAqxL2sXRIcaQVDPzgUEn34ApL4Xham3qYHGAjpCPeg== @@ -37,46 +37,23 @@ react-transition-group "^2.5.3" warning "^4.0.1" -"@material-ui/icons@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-3.0.2.tgz#d67a6dd1ec8312d3a88ec97944a63daeef24fe10" - integrity sha512-QY/3gJnObZQ3O/e6WjH+0ah2M3MOgLOzCy8HTUoUx9B6dDrS18vP7Ycw3qrDEKlB6q1KNxy6CZHm5FCauWGy2g== +"@material-ui/icons@^4.0.0-alpha.1": + version "4.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.0.0-alpha.1.tgz#98e9a572a371473c90594cd2101d0cbbe74e2729" + integrity sha512-SEQTG3k8C9NPo4ZinExSTPtte7JSRKqHYulomwePyDNqUpPrA0WkBerKbKy+V8RuEKo5MhpOfAc4KvXEUJnp2g== dependencies: "@babel/runtime" "^7.2.0" - recompose "0.28.0 - 0.30.0" -"@material-ui/lab@^3.0.0-alpha.30": - version "3.0.0-alpha.30" - resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-3.0.0-alpha.30.tgz#c6c64d0ff2b28410a09e4009f3677499461f3df8" - integrity sha512-d8IXbkQO92Ln7f/Tzy8Q5cLi/sMWH/Uz1xrOO5NKUgg42whwyCuoT9ErddDPFNQmPi9d1C7A5AG8ONjEAbAIyQ== +"@material-ui/lab@^4.0.0-alpha.6": + version "4.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.6.tgz#06263a88b27ae58e9150a2efd99fefb34037e7f0" + integrity sha512-mnnJXG7ofnEzUeIvIi2FdycFT5aN9L/zw2rAXSWnD2OnKm5EZpm3s6eiSDXLIg7Ulh+rU0yHmlVI4OVHHjPLgw== dependencies: "@babel/runtime" "^7.2.0" - "@material-ui/utils" "^3.0.0-alpha.2" - classnames "^2.2.5" + "@material-ui/utils" "^4.0.0-alpha.4" + clsx "^1.0.2" keycode "^2.1.9" - prop-types "^15.6.0" - -"@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" + prop-types "^15.7.2" "@material-ui/styles@^4.0.0-alpha.6": version "4.0.0-alpha.6" @@ -110,15 +87,6 @@ prop-types "^15.6.0" 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": version "4.0.0-alpha.4" 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" 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@*": version "11.13.0" 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" 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: version "4.10.1" 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" 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": version "0.0.2" 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" 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: version "4.2.1" 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" 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: version "1.0.2" 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" 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: version "2.0.1" 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" 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: version "1.4.1" 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: 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: version "3.5.1" 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" 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: version "3.3.0" 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" 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" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== @@ -2574,7 +2484,7 @@ iconv-lite@0.4.23: dependencies: 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" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -2610,6 +2520,11 @@ ignore-walk@^3.0.1: dependencies: 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: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -2857,7 +2772,7 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 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" 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: version "2.5.1" 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" 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: 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" @@ -2979,13 +2878,6 @@ jss-plugin-default-unit@^10.0.0-alpha.16: "@babel/runtime" "^7.3.1" 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: version "10.0.0-alpha.16" 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" 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: version "10.0.0-alpha.16" 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" 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: 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" @@ -3026,13 +2903,6 @@ jss-plugin-props-sort@^10.0.0-alpha.16: "@babel/runtime" "^7.3.1" 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: 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" @@ -3041,13 +2911,6 @@ jss-plugin-rule-value-function@^10.0.0-alpha.16: "@babel/runtime" "^7.3.1" 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: 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" @@ -3057,15 +2920,7 @@ jss-plugin-vendor-prefixer@^10.0.0-alpha.16: css-vendor "^2.0.1" jss "10.0.0-alpha.16" -jss-plugin-vendor-prefixer@^10.0.0-alpha.7: - 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: +jss@10.0.0-alpha.16, jss@^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" integrity sha512-HmKNNnr82TR5jkWjBcbrx/uim2ief588pWp7zsf4GQpL125zRkEaWYL1SXv5bR6bBvAoTtvJsTAOxDIlLxUNZg== @@ -3526,14 +3381,6 @@ no-case@^2.2.0: dependencies: 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: version "0.7.5" 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" 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: version "15.7.2" 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" 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" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" 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" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -4410,18 +4250,6 @@ readdirp@^2.2.1: micromatch "^3.1.10" 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: version "0.4.1" 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" split-string "^3.0.1" -setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -5037,7 +4865,7 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -symbol-observable@^1.0.4, symbol-observable@^1.2.0: +symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" 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" 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: version "3.4.10" 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" 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: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" diff --git a/backend/src/Model/Base64Message.ts b/backend/src/Model/Base64Message.ts index 1470c9a..9527082 100644 --- a/backend/src/Model/Base64Message.ts +++ b/backend/src/Model/Base64Message.ts @@ -1,4 +1,4 @@ -import { Base64 } from 'js-base64' +const Base64 = require('js-base64') export class Base64Message { private base64Message: string diff --git a/backend/src/Model/Edge.ts b/backend/src/Model/Edge.ts index 1b90874..8ef3cbd 100644 --- a/backend/src/Model/Edge.ts +++ b/backend/src/Model/Edge.ts @@ -12,7 +12,7 @@ export class Edge implements Hashable { this.name = name } - public edges() { + public edges(): Array> { return this.target ? this.target.edgeArray : [] } diff --git a/package.json b/package.json index 57479a6..330d3d1 100644 --- a/package.json +++ b/package.json @@ -88,11 +88,11 @@ "webdriverio": "5.4" }, "dependencies": { - "@types/js-base64": "^2.3.1", "about-window": "^1.12.1", "electron-log": "^2.2.17", "electron-telemetry": "git+https://github.com/thomasnordquist/electron-telemetry.git#dist", "electron-updater": "^4.0.6", + "js-base64": "^2.5.1", "lowdb": "^1.0.0", "mqtt": "^2.18.8", "sha1": "^1.1.1" diff --git a/src/electron.ts b/src/electron.ts index f4b9140..5acb010 100644 --- a/src/electron.ts +++ b/src/electron.ts @@ -19,7 +19,7 @@ if (!isDev) { if (typeof options.platform === 'string' && typeof options.package === 'string') { buildOptions = options } - } catch (ignore) {} + } catch (loadingBuildOptionsMayFail) {} console.log(buildOptions) const electronTelemetry = electronTelemetryFactory('9b0c8ca04a361eb8160d98c5', buildOptions) @@ -63,8 +63,13 @@ function createWindow() { }) console.log('icon path', iconPath) - // and load the index.html of the app. - mainWindow.loadFile('app/build/index.html') + + // Load the index.html of the app. + if (isDev) { + mainWindow.loadURL('http://localhost:8080') + } else { + mainWindow.loadFile('app/build/index.html') + } // Emitted when the window is closed. mainWindow.on('close', () => { diff --git a/tslint.json b/tslint.json index 98db91f..a7a2403 100644 --- a/tslint.json +++ b/tslint.json @@ -10,6 +10,8 @@ "indent": [true, "spaces", 2], "import-name": false, "no-submodule-imports": false, + "array-type": [true, "generic"], + "prefer-array-literal": false, "variable-name": [true, "ban-keywords", "check-format", "allow-pascal-case"], "trailing-comma": [ true, diff --git a/yarn.lock b/yarn.lock index 0dcb4ab..eb3e066 100644 --- a/yarn.lock +++ b/yarn.lock @@ -126,11 +126,6 @@ dependencies: "@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@*": version "4.14.121" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.121.tgz#9327e20d49b95fc2bf983fc2f045b2c6effc80b9" @@ -2090,6 +2085,11 @@ istanbul-reports@^2.0.1: dependencies: 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: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"