Merge pull request #756 from thomasnordquist/chore/fix-linting
Chore/fix linting
This commit is contained in:
@@ -60,63 +60,55 @@ export const saveCharts = () => async (dispatch: Dispatch<any>, getState: () =>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const addChart = (chartParameters: ChartParameters) => async (
|
export const addChart =
|
||||||
dispatch: Dispatch<any>,
|
(chartParameters: ChartParameters) => async (dispatch: Dispatch<any>, getState: () => AppState) => {
|
||||||
getState: () => AppState
|
const chartExists = Boolean(
|
||||||
) => {
|
getState()
|
||||||
const chartExists = Boolean(
|
.charts.get('charts')
|
||||||
getState()
|
.find(chart => chart.topic === chartParameters.topic && chart.dotPath === chartParameters.dotPath)
|
||||||
.charts.get('charts')
|
)
|
||||||
.find(chart => chart.topic === chartParameters.topic && chart.dotPath === chartParameters.dotPath)
|
if (chartExists) {
|
||||||
)
|
dispatch(showNotification('Already added'))
|
||||||
if (chartExists) {
|
return
|
||||||
dispatch(showNotification('Already added'))
|
}
|
||||||
return
|
|
||||||
|
dispatch({
|
||||||
|
type: ActionTypes.CHARTS_ADD,
|
||||||
|
chart: chartParameters,
|
||||||
|
})
|
||||||
|
dispatch(saveCharts())
|
||||||
|
dispatch(showNotification('Added to chart panel'))
|
||||||
}
|
}
|
||||||
|
|
||||||
dispatch({
|
export const updateChart =
|
||||||
type: ActionTypes.CHARTS_ADD,
|
(chartParameters: ChartParameters) => async (dispatch: Dispatch<any>, getState: () => AppState) => {
|
||||||
chart: chartParameters,
|
dispatch({
|
||||||
})
|
type: ActionTypes.CHARTS_UPDATE,
|
||||||
dispatch(saveCharts())
|
topic: chartParameters.topic,
|
||||||
dispatch(showNotification('Added to chart panel'))
|
dotPath: chartParameters.dotPath,
|
||||||
}
|
parameters: chartParameters,
|
||||||
|
})
|
||||||
|
dispatch(saveCharts())
|
||||||
|
}
|
||||||
|
|
||||||
export const updateChart = (chartParameters: ChartParameters) => async (
|
export const removeChart =
|
||||||
dispatch: Dispatch<any>,
|
(chartParameters: ChartParameters) => async (dispatch: Dispatch<any>, getState: () => AppState) => {
|
||||||
getState: () => AppState
|
dispatch({
|
||||||
) => {
|
chart: chartParameters,
|
||||||
dispatch({
|
type: ActionTypes.CHARTS_REMOVE,
|
||||||
type: ActionTypes.CHARTS_UPDATE,
|
})
|
||||||
topic: chartParameters.topic,
|
dispatch(saveCharts())
|
||||||
dotPath: chartParameters.dotPath,
|
}
|
||||||
parameters: chartParameters,
|
|
||||||
})
|
|
||||||
dispatch(saveCharts())
|
|
||||||
}
|
|
||||||
|
|
||||||
export const removeChart = (chartParameters: ChartParameters) => async (
|
export const moveChartUp =
|
||||||
dispatch: Dispatch<any>,
|
(parameters: { topic: string; dotPath?: string }) => async (dispatch: Dispatch<any>, getState: () => AppState) => {
|
||||||
getState: () => AppState
|
dispatch({
|
||||||
) => {
|
topic: parameters.topic,
|
||||||
dispatch({
|
dotPath: parameters.dotPath,
|
||||||
chart: chartParameters,
|
type: ActionTypes.CHARTS_MOVE_UP,
|
||||||
type: ActionTypes.CHARTS_REMOVE,
|
})
|
||||||
})
|
dispatch(saveCharts())
|
||||||
dispatch(saveCharts())
|
}
|
||||||
}
|
|
||||||
|
|
||||||
export const moveChartUp = (parameters: { topic: string; dotPath?: string }) => async (
|
|
||||||
dispatch: Dispatch<any>,
|
|
||||||
getState: () => AppState
|
|
||||||
) => {
|
|
||||||
dispatch({
|
|
||||||
topic: parameters.topic,
|
|
||||||
dotPath: parameters.dotPath,
|
|
||||||
type: ActionTypes.CHARTS_MOVE_UP,
|
|
||||||
})
|
|
||||||
dispatch(saveCharts())
|
|
||||||
}
|
|
||||||
|
|
||||||
export const setCharts = (charts: Array<ChartParameters>): Action => {
|
export const setCharts = (charts: Array<ChartParameters>): Action => {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -11,31 +11,29 @@ import { showError } from './Global'
|
|||||||
import { TopicViewModel } from '../model/TopicViewModel'
|
import { TopicViewModel } from '../model/TopicViewModel'
|
||||||
import { addMqttConnectionEvent, makeConnectionStateEvent, removeConnection, rendererEvents } from '../../../events'
|
import { addMqttConnectionEvent, makeConnectionStateEvent, removeConnection, rendererEvents } from '../../../events'
|
||||||
|
|
||||||
export const connect = (options: MqttOptions, connectionId: string) => (
|
export const connect =
|
||||||
dispatch: Dispatch<any>,
|
(options: MqttOptions, connectionId: string) => (dispatch: Dispatch<any>, getState: () => AppState) => {
|
||||||
getState: () => AppState
|
dispatch(connecting(connectionId))
|
||||||
) => {
|
rendererEvents.emit(addMqttConnectionEvent, { options, id: connectionId })
|
||||||
dispatch(connecting(connectionId))
|
const event = makeConnectionStateEvent(connectionId)
|
||||||
rendererEvents.emit(addMqttConnectionEvent, { options, id: connectionId })
|
const host = url.parse(options.url).hostname
|
||||||
const event = makeConnectionStateEvent(connectionId)
|
|
||||||
const host = url.parse(options.url).hostname
|
|
||||||
|
|
||||||
rendererEvents.subscribe(event, dataSourceState => {
|
rendererEvents.subscribe(event, dataSourceState => {
|
||||||
if (dataSourceState.connected) {
|
if (dataSourceState.connected) {
|
||||||
const didReconnect = Boolean(getState().connection.tree)
|
const didReconnect = Boolean(getState().connection.tree)
|
||||||
if (!didReconnect) {
|
if (!didReconnect) {
|
||||||
const tree = new q.Tree<TopicViewModel>()
|
const tree = new q.Tree<TopicViewModel>()
|
||||||
tree.updateWithConnection(rendererEvents, connectionId)
|
tree.updateWithConnection(rendererEvents, connectionId)
|
||||||
dispatch(showTree(tree))
|
dispatch(showTree(tree))
|
||||||
dispatch(connected(tree, host!))
|
dispatch(connected(tree, host!))
|
||||||
|
}
|
||||||
|
} else if (dataSourceState.error) {
|
||||||
|
dispatch(showError(dataSourceState.error))
|
||||||
|
dispatch(disconnect())
|
||||||
}
|
}
|
||||||
} else if (dataSourceState.error) {
|
dispatch(updateHealth(dataSourceState))
|
||||||
dispatch(showError(dataSourceState.error))
|
})
|
||||||
dispatch(disconnect())
|
}
|
||||||
}
|
|
||||||
dispatch(updateHealth(dataSourceState))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const updateHealth = (dataSourceState: DataSourceState) => (dispatch: Dispatch<any>, getState: () => AppState) => {
|
const updateHealth = (dataSourceState: DataSourceState) => (dispatch: Dispatch<any>, getState: () => AppState) => {
|
||||||
let state
|
let state
|
||||||
|
|||||||
@@ -51,21 +51,19 @@ export const loadConnectionSettings = () => async (dispatch: Dispatch<any>, getS
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type CertificateTypes = 'selfSignedCertificate' | 'clientCertificate' | 'clientKey'
|
export type CertificateTypes = 'selfSignedCertificate' | 'clientCertificate' | 'clientKey'
|
||||||
export const selectCertificate = (type: CertificateTypes, connectionId: string) => async (
|
export const selectCertificate =
|
||||||
dispatch: Dispatch<any>,
|
(type: CertificateTypes, connectionId: string) => async (dispatch: Dispatch<any>, getState: () => AppState) => {
|
||||||
getState: () => AppState
|
try {
|
||||||
) => {
|
const certificate = await openCertificate()
|
||||||
try {
|
dispatch(
|
||||||
const certificate = await openCertificate()
|
updateConnection(connectionId, {
|
||||||
dispatch(
|
[type]: certificate,
|
||||||
updateConnection(connectionId, {
|
})
|
||||||
[type]: certificate,
|
)
|
||||||
})
|
} catch (error) {
|
||||||
)
|
dispatch(showError(error))
|
||||||
} catch (error) {
|
}
|
||||||
dispatch(showError(error))
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
async function openCertificate(): Promise<CertificateParameters> {
|
async function openCertificate(): Promise<CertificateParameters> {
|
||||||
const rejectReasons = {
|
const rejectReasons = {
|
||||||
|
|||||||
@@ -43,12 +43,14 @@ export const storeSettings = () => async (dispatch: Dispatch<any>, getState: ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const setAutoExpandLimit = (autoExpandLimit: number = 0) => (dispatch: Dispatch<any>) => {
|
export const setAutoExpandLimit =
|
||||||
dispatch({
|
(autoExpandLimit: number = 0) =>
|
||||||
autoExpandLimit,
|
(dispatch: Dispatch<any>) => {
|
||||||
type: ActionTypes.SETTINGS_SET_AUTO_EXPAND_LIMIT,
|
dispatch({
|
||||||
})
|
autoExpandLimit,
|
||||||
}
|
type: ActionTypes.SETTINGS_SET_AUTO_EXPAND_LIMIT,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export const setTimeLocale = (timeLocale: string) => (dispatch: Dispatch<any>) => {
|
export const setTimeLocale = (timeLocale: string) => (dispatch: Dispatch<any>) => {
|
||||||
dispatch({
|
dispatch({
|
||||||
@@ -81,13 +83,15 @@ export const toggleHighlightTopicUpdates = () => (dispatch: Dispatch<any>) => {
|
|||||||
dispatch(storeSettings())
|
dispatch(storeSettings())
|
||||||
}
|
}
|
||||||
|
|
||||||
export const setTopicOrder = (topicOrder: TopicOrder = TopicOrder.none) => (dispatch: Dispatch<any>) => {
|
export const setTopicOrder =
|
||||||
dispatch({
|
(topicOrder: TopicOrder = TopicOrder.none) =>
|
||||||
topicOrder,
|
(dispatch: Dispatch<any>) => {
|
||||||
type: ActionTypes.SETTINGS_SET_TOPIC_ORDER,
|
dispatch({
|
||||||
})
|
topicOrder,
|
||||||
dispatch(storeSettings())
|
type: ActionTypes.SETTINGS_SET_TOPIC_ORDER,
|
||||||
}
|
})
|
||||||
|
dispatch(storeSettings())
|
||||||
|
}
|
||||||
|
|
||||||
export const filterTopics = (filterStr: string) => (dispatch: Dispatch<any>, getState: () => AppState) => {
|
export const filterTopics = (filterStr: string) => (dispatch: Dispatch<any>, getState: () => AppState) => {
|
||||||
const { tree } = getState().connection
|
const { tree } = getState().connection
|
||||||
|
|||||||
@@ -12,12 +12,10 @@ export { clearTopic } from './clearTopic'
|
|||||||
|
|
||||||
export { moveSelectionUpOrDownwards, moveInward, moveOutward } from './visibleTreeTraversal'
|
export { moveSelectionUpOrDownwards, moveInward, moveOutward } from './visibleTreeTraversal'
|
||||||
|
|
||||||
export const selectTopic = (topic: q.TreeNode<TopicViewModel>) => (
|
export const selectTopic =
|
||||||
dispatch: Dispatch<any>,
|
(topic: q.TreeNode<TopicViewModel>) => (dispatch: Dispatch<any>, getState: () => AppState) => {
|
||||||
getState: () => AppState
|
debouncedSelectTopic(topic, dispatch, getState)
|
||||||
) => {
|
}
|
||||||
debouncedSelectTopic(topic, dispatch, getState)
|
|
||||||
}
|
|
||||||
|
|
||||||
const debouncedSelectTopic = debounce(
|
const debouncedSelectTopic = debounce(
|
||||||
(topic: q.TreeNode<TopicViewModel>, dispatch: Dispatch<any>, getState: () => AppState) => {
|
(topic: q.TreeNode<TopicViewModel>, dispatch: Dispatch<any>, getState: () => AppState) => {
|
||||||
@@ -74,25 +72,26 @@ function destroyUnreferencedTree(state: AppState) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const resetStore = () => (dispatch: Dispatch<any>, getState: () => AppState): AnyAction => {
|
export const resetStore =
|
||||||
destroyUnreferencedTree(getState())
|
() =>
|
||||||
|
(dispatch: Dispatch<any>, getState: () => AppState): AnyAction => {
|
||||||
|
destroyUnreferencedTree(getState())
|
||||||
|
|
||||||
return dispatch({
|
return dispatch({
|
||||||
type: ActionTypes.TREE_RESET_STORE,
|
type: ActionTypes.TREE_RESET_STORE,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const showTree = (tree: q.Tree<TopicViewModel> | undefined) => (
|
export const showTree =
|
||||||
dispatch: Dispatch<any>,
|
(tree: q.Tree<TopicViewModel> | undefined) =>
|
||||||
getState: () => AppState
|
(dispatch: Dispatch<any>, getState: () => AppState): AnyAction => {
|
||||||
): AnyAction => {
|
destroyUnreferencedTree(getState())
|
||||||
destroyUnreferencedTree(getState())
|
|
||||||
|
|
||||||
return dispatch({
|
return dispatch({
|
||||||
tree,
|
tree,
|
||||||
type: ActionTypes.TREE_SHOW_TREE,
|
type: ActionTypes.TREE_SHOW_TREE,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const togglePause = (tree?: q.Tree<TopicViewModel>) => (dispatch: Dispatch<any>, getState: () => AppState) => {
|
export const togglePause = (tree?: q.Tree<TopicViewModel>) => (dispatch: Dispatch<any>, getState: () => AppState) => {
|
||||||
const paused = getState().tree.get('paused')
|
const paused = getState().tree.get('paused')
|
||||||
|
|||||||
@@ -5,52 +5,50 @@ import { makePublishEvent, rendererEvents } from '../../../events'
|
|||||||
import { moveSelectionUpOrDownwards } from './visibleTreeTraversal'
|
import { moveSelectionUpOrDownwards } from './visibleTreeTraversal'
|
||||||
import { globalActions } from '.'
|
import { globalActions } from '.'
|
||||||
|
|
||||||
export const clearTopic = (topic: q.TreeNode<any>, recursive: boolean) => async (
|
export const clearTopic =
|
||||||
dispatch: Dispatch<any>,
|
(topic: q.TreeNode<any>, recursive: boolean) => async (dispatch: Dispatch<any>, getState: () => AppState) => {
|
||||||
getState: () => AppState
|
const topicsForPurging = recursive ? [topic, ...topic.childTopics()] : [topic]
|
||||||
) => {
|
|
||||||
const topicsForPurging = recursive ? [topic, ...topic.childTopics()] : [topic]
|
|
||||||
|
|
||||||
if (recursive) {
|
if (recursive) {
|
||||||
const topicCount = topic.childTopicCount()
|
const topicCount = topic.childTopicCount()
|
||||||
|
|
||||||
const topicDelta = topic.hasMessage() ? -1 : 0
|
const topicDelta = topic.hasMessage() ? -1 : 0
|
||||||
const childTopicsMessage =
|
const childTopicsMessage =
|
||||||
topicCount + topicDelta > 0
|
topicCount + topicDelta > 0
|
||||||
? ` and ${topicCount + topicDelta} child ${topicCount + topicDelta === 1 ? 'topic' : 'topics'}`
|
? ` and ${topicCount + topicDelta} child ${topicCount + topicDelta === 1 ? 'topic' : 'topics'}`
|
||||||
: ''
|
: ''
|
||||||
|
|
||||||
const confirmed = await dispatch(
|
const confirmed = await dispatch(
|
||||||
globalActions.requestConfirmation(
|
globalActions.requestConfirmation(
|
||||||
'Confirm delete',
|
'Confirm delete',
|
||||||
`Do you want to clear "${topic.path()}"${childTopicsMessage}?\n\nThis function will send an empty payload (QoS 0, retain) to this and every subtopic, clearing retained topics in the process. Only use this function if you know what you are doing.`
|
`Do you want to clear "${topic.path()}"${childTopicsMessage}?\n\nThis function will send an empty payload (QoS 0, retain) to this and every subtopic, clearing retained topics in the process. Only use this function if you know what you are doing.`
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
if (!confirmed) {
|
||||||
if (!confirmed) {
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dispatch(moveSelectionUpOrDownwards('next'))
|
||||||
|
|
||||||
|
const { connectionId } = getState().connection
|
||||||
|
if (!connectionId) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
const publishEvent = makePublishEvent(connectionId)
|
||||||
|
|
||||||
|
topicsForPurging
|
||||||
|
.filter(t => t.path() !== '' && t.hasMessage())
|
||||||
|
.map(t => t.path())
|
||||||
|
.forEach((path, idx) => {
|
||||||
|
const mqttMessage = {
|
||||||
|
topic: path,
|
||||||
|
payload: null,
|
||||||
|
retain: true,
|
||||||
|
qos: 0 as 0,
|
||||||
|
messageId: undefined,
|
||||||
|
}
|
||||||
|
// Rate limit deletion
|
||||||
|
setTimeout(() => rendererEvents.emit(publishEvent, mqttMessage), 20 * idx)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
dispatch(moveSelectionUpOrDownwards('next'))
|
|
||||||
|
|
||||||
const { connectionId } = getState().connection
|
|
||||||
if (!connectionId) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const publishEvent = makePublishEvent(connectionId)
|
|
||||||
|
|
||||||
topicsForPurging
|
|
||||||
.filter(t => t.path() !== '' && t.hasMessage())
|
|
||||||
.map(t => t.path())
|
|
||||||
.forEach((path, idx) => {
|
|
||||||
const mqttMessage = {
|
|
||||||
topic: path,
|
|
||||||
payload: null,
|
|
||||||
retain: true,
|
|
||||||
qos: 0 as 0,
|
|
||||||
messageId: undefined,
|
|
||||||
}
|
|
||||||
// Rate limit deletion
|
|
||||||
setTimeout(() => rendererEvents.emit(publishEvent, mqttMessage), 20 * idx)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -6,53 +6,56 @@ import { SettingsState } from '../reducers/Settings'
|
|||||||
import { sortedNodes } from '../sortedNodes'
|
import { sortedNodes } from '../sortedNodes'
|
||||||
import { TopicViewModel } from '../model/TopicViewModel'
|
import { TopicViewModel } from '../model/TopicViewModel'
|
||||||
|
|
||||||
export const moveSelectionUpOrDownwards = (direction: 'next' | 'previous') => (
|
export const moveSelectionUpOrDownwards =
|
||||||
dispatch: Dispatch<any>,
|
(direction: 'next' | 'previous') =>
|
||||||
getState: () => AppState
|
(dispatch: Dispatch<any>, getState: () => AppState): any => {
|
||||||
): any => {
|
const state = getState()
|
||||||
const state = getState()
|
const selected = state.tree.get('selectedTopic')
|
||||||
const selected = state.tree.get('selectedTopic')
|
const tree = state.tree.get('tree')
|
||||||
const tree = state.tree.get('tree')
|
|
||||||
|
|
||||||
if (!selected || !tree) {
|
if (!selected || !tree) {
|
||||||
if (tree) {
|
if (tree) {
|
||||||
dispatch(selectTopic(tree))
|
dispatch(selectTopic(tree))
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const nextTreeNode = nextVisibleElementInTree(state.settings, tree, selected, direction)
|
||||||
|
if (nextTreeNode && nextTreeNode.viewModel) {
|
||||||
|
dispatch(selectTopic(nextTreeNode))
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}
|
|
||||||
const nextTreeNode = nextVisibleElementInTree(state.settings, tree, selected, direction)
|
|
||||||
if (nextTreeNode && nextTreeNode.viewModel) {
|
|
||||||
dispatch(selectTopic(nextTreeNode))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const moveInward = () => (dispatch: Dispatch<any>, getState: () => AppState): any => {
|
|
||||||
const state = getState()
|
|
||||||
const selected = state.tree.get('selectedTopic')
|
|
||||||
if (!selected || !selected.viewModel) {
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!selected.viewModel.isExpanded() && selected.edgeCount() > 0) {
|
export const moveInward =
|
||||||
selected.viewModel.setExpanded(true, true)
|
() =>
|
||||||
} else {
|
(dispatch: Dispatch<any>, getState: () => AppState): any => {
|
||||||
dispatch(moveSelectionUpOrDownwards('next'))
|
const state = getState()
|
||||||
}
|
const selected = state.tree.get('selectedTopic')
|
||||||
}
|
if (!selected || !selected.viewModel) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
export const moveOutward = () => (dispatch: Dispatch<any>, getState: () => AppState): any => {
|
if (!selected.viewModel.isExpanded() && selected.edgeCount() > 0) {
|
||||||
const state = getState()
|
selected.viewModel.setExpanded(true, true)
|
||||||
const selected = state.tree.get('selectedTopic')
|
} else {
|
||||||
if (!selected || !selected.viewModel) {
|
dispatch(moveSelectionUpOrDownwards('next'))
|
||||||
return
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected.viewModel.isExpanded() && selected.edgeCount() > 0) {
|
export const moveOutward =
|
||||||
selected.viewModel.setExpanded(false, true)
|
() =>
|
||||||
} else {
|
(dispatch: Dispatch<any>, getState: () => AppState): any => {
|
||||||
dispatch(moveSelectionUpOrDownwards('previous'))
|
const state = getState()
|
||||||
|
const selected = state.tree.get('selectedTopic')
|
||||||
|
if (!selected || !selected.viewModel) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selected.viewModel.isExpanded() && selected.edgeCount() > 0) {
|
||||||
|
selected.viewModel.setExpanded(false, true)
|
||||||
|
} else {
|
||||||
|
dispatch(moveSelectionUpOrDownwards('previous'))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
function isTreeNodeVisible(treeNode: q.TreeNode<any>) {
|
function isTreeNodeVisible(treeNode: q.TreeNode<any>) {
|
||||||
return Boolean(treeNode.viewModel)
|
return Boolean(treeNode.viewModel)
|
||||||
|
|||||||
@@ -12,8 +12,7 @@ import { ConfirmationRequest } from '../reducers/Global'
|
|||||||
import { connect } from 'react-redux'
|
import { connect } from 'react-redux'
|
||||||
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'
|
||||||
|
;(window as any).global = window
|
||||||
(window as any).global = window
|
|
||||||
|
|
||||||
const Settings = React.lazy(() => import('./SettingsDrawer/Settings'))
|
const Settings = React.lazy(() => import('./SettingsDrawer/Settings'))
|
||||||
const ContentView = React.lazy(() => import('./Layout/ContentView'))
|
const ContentView = React.lazy(() => import('./Layout/ContentView'))
|
||||||
@@ -68,7 +67,7 @@ class App extends React.PureComponent<Props, {}> {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
const anyProps: any = {};
|
const anyProps: any = {}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={centerContent}>
|
<div className={centerContent}>
|
||||||
|
|||||||
@@ -43,15 +43,15 @@ class Demo extends React.Component<{ classes: any }, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public componentDidMount() {
|
public componentDidMount() {
|
||||||
; (window as any).demo.enableMouse = () => {
|
;(window as any).demo.enableMouse = () => {
|
||||||
this.setState({ enabled: true })
|
this.setState({ enabled: true })
|
||||||
}
|
}
|
||||||
; (window as any).demo.moveMouse = (x: number, y: number, animationTime: number) => {
|
;(window as any).demo.moveMouse = (x: number, y: number, animationTime: number) => {
|
||||||
const stepSizeX = Math.abs(this.state.position.x - x) / (animationTime / this.frameInterval)
|
const stepSizeX = Math.abs(this.state.position.x - x) / (animationTime / this.frameInterval)
|
||||||
const stepSizeY = Math.abs(this.state.position.y - y) / (animationTime / this.frameInterval)
|
const stepSizeY = Math.abs(this.state.position.y - y) / (animationTime / this.frameInterval)
|
||||||
this.setState({ stepSizeX, stepSizeY, enabled: true, target: { x, y } })
|
this.setState({ stepSizeX, stepSizeY, enabled: true, target: { x, y } })
|
||||||
this.moveCloser()
|
this.moveCloser()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public render() {
|
public render() {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ function writeHeapdump(path?: string) {
|
|||||||
return path
|
return path
|
||||||
}
|
}
|
||||||
|
|
||||||
; (window as any).demo = {
|
;(window as any).demo = {
|
||||||
writeHeapdump,
|
writeHeapdump,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ import { settingsActions } from '../../actions'
|
|||||||
import { withStyles } from '@material-ui/styles'
|
import { withStyles } from '@material-ui/styles'
|
||||||
|
|
||||||
function importAll(r: any) {
|
function importAll(r: any) {
|
||||||
r.keys().forEach(r);
|
r.keys().forEach(r)
|
||||||
}
|
}
|
||||||
// @ts-expect-error -- webpack require
|
// @ts-expect-error -- webpack require
|
||||||
importAll(require.context('moment/locale', true, /\.js$/));
|
importAll(require.context('moment/locale', true, /\.js$/))
|
||||||
|
|
||||||
const moment = require('moment')
|
const moment = require('moment')
|
||||||
|
|
||||||
|
|||||||
@@ -43,9 +43,9 @@ class CodeDiff extends React.PureComponent<Props, State> {
|
|||||||
private plottableLiteralsIndexedWithLineNumbers() {
|
private plottableLiteralsIndexedWithLineNumbers() {
|
||||||
const allLiterals = this.isValidJson(this.props.current) ? literalsMappedByLines(this.props.current) || [] : []
|
const allLiterals = this.isValidJson(this.props.current) ? literalsMappedByLines(this.props.current) || [] : []
|
||||||
|
|
||||||
return allLiterals.map((l: JsonPropertyLocation) => (isPlottable(l.value) ? l : undefined)) as Array<
|
return allLiterals.map((l: JsonPropertyLocation) =>
|
||||||
JsonPropertyLocation
|
isPlottable(l.value) ? l : undefined
|
||||||
>
|
) as Array<JsonPropertyLocation>
|
||||||
}
|
}
|
||||||
|
|
||||||
private renderStyledCodeLines(changes: Array<Diff.Change>) {
|
private renderStyledCodeLines(changes: Array<Diff.Change>) {
|
||||||
|
|||||||
@@ -83,10 +83,12 @@ class ValueRenderer extends React.Component<Props, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public render() {
|
public render() {
|
||||||
return <div style={{ padding: '0px 0px 8px 0px', width: '100%' }}>
|
return (
|
||||||
{this.props.message?.payload?.decoder === Decoder.SPARKPLUG && "Decoded SparkplugB"}
|
<div style={{ padding: '0px 0px 8px 0px', width: '100%' }}>
|
||||||
{this.renderValue()}
|
{this.props.message?.payload?.decoder === Decoder.SPARKPLUG && 'Decoded SparkplugB'}
|
||||||
</div>
|
{this.renderValue()}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
public renderValue() {
|
public renderValue() {
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ function nodeDotPathToHistory(startTime: number | undefined, history: q.MessageH
|
|||||||
let json: any = {}
|
let json: any = {}
|
||||||
try {
|
try {
|
||||||
json = message.payload ? JSON.parse(Base64Message.toUnicodeString(message.payload)) : {}
|
json = message.payload ? JSON.parse(Base64Message.toUnicodeString(message.payload)) : {}
|
||||||
} catch (ignore) { }
|
} catch (ignore) {}
|
||||||
|
|
||||||
const value = dotProp.get(json, dotPath)
|
const value = dotProp.get(json, dotPath)
|
||||||
|
|
||||||
|
|||||||
@@ -91,23 +91,26 @@ class TreeComponent extends React.PureComponent<Props, State> {
|
|||||||
const updateInterval = Math.max(expectedRenderTime * 7, 300)
|
const updateInterval = Math.max(expectedRenderTime * 7, 300)
|
||||||
const timeUntilNextUpdate = updateInterval - (performance.now() - this.renderTime)
|
const timeUntilNextUpdate = updateInterval - (performance.now() - this.renderTime)
|
||||||
|
|
||||||
this.updateTimer = setTimeout(() => {
|
this.updateTimer = setTimeout(
|
||||||
window.requestIdleCallback(
|
() => {
|
||||||
() => {
|
window.requestIdleCallback(
|
||||||
this.updateTimer && clearTimeout(this.updateTimer)
|
() => {
|
||||||
this.updateTimer = undefined
|
this.updateTimer && clearTimeout(this.updateTimer)
|
||||||
this.renderTime = performance.now()
|
this.updateTimer = undefined
|
||||||
|
this.renderTime = performance.now()
|
||||||
|
|
||||||
window.requestIdleCallback(
|
window.requestIdleCallback(
|
||||||
() => {
|
() => {
|
||||||
this.setState({ lastUpdate: this.renderTime })
|
this.setState({ lastUpdate: this.renderTime })
|
||||||
},
|
},
|
||||||
{ timeout: 100 }
|
{ timeout: 100 }
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{ timeout: 500 }
|
{ timeout: 500 }
|
||||||
)
|
)
|
||||||
}, Math.max(0, timeUntilNextUpdate))
|
},
|
||||||
|
Math.max(0, timeUntilNextUpdate)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
public componentWillUpdate() {
|
public componentWillUpdate() {
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ class UpdateNotifier extends React.PureComponent<Props, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async checkForUpdates() {
|
private async checkForUpdates() {
|
||||||
const ownVersion = await rendererRpc.call(getAppVersion, undefined, 10000);
|
const ownVersion = await rendererRpc.call(getAppVersion, undefined, 10000)
|
||||||
const releases = await this.fetchReleases();
|
const releases = await this.fetchReleases()
|
||||||
const newerVersions = releases
|
const newerVersions = releases
|
||||||
.filter(release => this.allowPrereleaseIfOwnVersionIsBeta(release, ownVersion))
|
.filter(release => this.allowPrereleaseIfOwnVersionIsBeta(release, ownVersion))
|
||||||
.filter(release => compareVersions(release.tag_name, ownVersion) > 0)
|
.filter(release => compareVersions(release.tag_name, ownVersion) > 0)
|
||||||
|
|||||||
@@ -45,9 +45,11 @@ const initialStateFactory = Record<TreeStateModel>({
|
|||||||
filter: undefined,
|
filter: undefined,
|
||||||
})
|
})
|
||||||
|
|
||||||
const setPaused = (pause: boolean) => (state: TreeState, action: ShowTree): TreeState => {
|
const setPaused =
|
||||||
return state.set('paused', pause)
|
(pause: boolean) =>
|
||||||
}
|
(state: TreeState, action: ShowTree): TreeState => {
|
||||||
|
return state.set('paused', pause)
|
||||||
|
}
|
||||||
|
|
||||||
const actions: {
|
const actions: {
|
||||||
[s: string]: (state: TreeState, action: ReduxAction) => TreeState
|
[s: string]: (state: TreeState, action: ReduxAction) => TreeState
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
import { rendererRpc } from '../../../events'
|
import { rendererRpc } from '../../../events'
|
||||||
|
|
||||||
import {
|
import { storageStoreEvent, storageLoadEvent, storageClearEvent } from '../../../events/StorageEvents'
|
||||||
storageStoreEvent,
|
|
||||||
storageLoadEvent,
|
|
||||||
storageClearEvent,
|
|
||||||
} from '../../../events/StorageEvents'
|
|
||||||
|
|
||||||
export interface StorageIdentifier<Model> {
|
export interface StorageIdentifier<Model> {
|
||||||
id: string
|
id: string
|
||||||
@@ -25,9 +21,13 @@ class RemoteStorage implements PersistentStorage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async load<Model>(identifier: StorageIdentifier<Model>): Promise<Model | undefined> {
|
public async load<Model>(identifier: StorageIdentifier<Model>): Promise<Model | undefined> {
|
||||||
const result = await rendererRpc.call(storageLoadEvent, {
|
const result = await rendererRpc.call(
|
||||||
store: identifier.id,
|
storageLoadEvent,
|
||||||
}, 10000)
|
{
|
||||||
|
store: identifier.id,
|
||||||
|
},
|
||||||
|
10000
|
||||||
|
)
|
||||||
|
|
||||||
return (result as any).data
|
return (result as any).data
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,23 @@
|
|||||||
export const selectTextWithCtrlA = (options?: { targetSelector: string }) => (
|
export const selectTextWithCtrlA =
|
||||||
e: React.KeyboardEvent<HTMLDivElement>
|
(options?: { targetSelector: string }) => (e: React.KeyboardEvent<HTMLDivElement>) => {
|
||||||
) => {
|
const isCtrlA = (e.metaKey || e.ctrlKey) && e.key === 'a'
|
||||||
const isCtrlA = (e.metaKey || e.ctrlKey) && e.key === 'a'
|
|
||||||
|
|
||||||
if (isCtrlA && window.getSelection) {
|
if (isCtrlA && window.getSelection) {
|
||||||
e.persist()
|
e.persist()
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
const selection = window.getSelection()
|
const selection = window.getSelection()
|
||||||
const range = document.createRange()
|
const range = document.createRange()
|
||||||
const eventTarget = e.target as HTMLElement
|
const eventTarget = e.target as HTMLElement
|
||||||
const target: HTMLElement | null = options ? eventTarget.querySelector(options.targetSelector) : eventTarget
|
const target: HTMLElement | null = options ? eventTarget.querySelector(options.targetSelector) : eventTarget
|
||||||
|
|
||||||
if (!target) {
|
if (!target) {
|
||||||
console.error('Could not find matching target for Ctrl+A Event')
|
console.error('Could not find matching target for Ctrl+A Event')
|
||||||
}
|
}
|
||||||
if (selection && target) {
|
if (selection && target) {
|
||||||
range.selectNodeContents(target)
|
range.selectNodeContents(target)
|
||||||
selection.removeAllRanges()
|
selection.removeAllRanges()
|
||||||
selection.addRange(range)
|
selection.addRange(range)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
@@ -3,11 +3,7 @@ import * as fs from 'fs-extra'
|
|||||||
import * as lowdb from 'lowdb'
|
import * as lowdb from 'lowdb'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
import { backendRpc } from '../../events'
|
import { backendRpc } from '../../events'
|
||||||
import {
|
import { storageClearEvent, storageLoadEvent, storageStoreEvent } from '../../events/StorageEvents'
|
||||||
storageClearEvent,
|
|
||||||
storageLoadEvent,
|
|
||||||
storageStoreEvent,
|
|
||||||
} from '../../events/StorageEvents'
|
|
||||||
|
|
||||||
export default class ConfigStorage {
|
export default class ConfigStorage {
|
||||||
private file: string
|
private file: string
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ export class MqttSource implements DataSource<MqttOptions> {
|
|||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const client = mqttConnect(url.toString(), {
|
const client = mqttConnect(url.toString(), {
|
||||||
resubscribe: false,
|
resubscribe: false,
|
||||||
rejectUnauthorized: options.certValidation,
|
rejectUnauthorized: options.certValidation,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export enum Decoder {
|
export enum Decoder {
|
||||||
NONE,
|
NONE,
|
||||||
SPARKPLUG
|
SPARKPLUG,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export class Tree<ViewModel extends Destroyable> extends TreeNode<ViewModel> {
|
|||||||
if (!this.paused && this.applyChangesHasCompleted) {
|
if (!this.paused && this.applyChangesHasCompleted) {
|
||||||
this.applyChangesHasCompleted = false
|
this.applyChangesHasCompleted = false
|
||||||
if ((window as any).requestIdleCallback) {
|
if ((window as any).requestIdleCallback) {
|
||||||
; (window as any).requestIdleCallback(() => this.applyUnmergedChanges(), { timeout: 500 })
|
;(window as any).requestIdleCallback(() => this.applyUnmergedChanges(), { timeout: 500 })
|
||||||
} else {
|
} else {
|
||||||
this.applyUnmergedChanges()
|
this.applyUnmergedChanges()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,22 @@
|
|||||||
import { readFileSync } from 'fs'
|
import { readFileSync } from 'fs'
|
||||||
import * as protobuf from 'protobufjs'
|
import * as protobuf from 'protobufjs'
|
||||||
import { Base64Message } from './Base64Message';
|
import { Base64Message } from './Base64Message'
|
||||||
import { Decoder } from './Decoder';
|
import { Decoder } from './Decoder'
|
||||||
|
|
||||||
const buffer = readFileSync(require.resolve('../../../../res/sparkplug_b.proto'));
|
const buffer = readFileSync(require.resolve('../../../../res/sparkplug_b.proto'))
|
||||||
const root = protobuf.parse(buffer.toString()).root
|
const root = protobuf.parse(buffer.toString()).root
|
||||||
export let SparkplugPayload = root.lookupType('com.cirruslink.sparkplug.protobuf.Payload')
|
export let SparkplugPayload = root.lookupType('com.cirruslink.sparkplug.protobuf.Payload')
|
||||||
|
|
||||||
export const SparkplugDecoder = {
|
export const SparkplugDecoder = {
|
||||||
decode(input: Buffer): Base64Message | undefined {
|
decode(input: Buffer): Base64Message | undefined {
|
||||||
try {
|
try {
|
||||||
let message = Base64Message.fromString(
|
const message = Base64Message.fromString(
|
||||||
JSON.stringify(
|
JSON.stringify(SparkplugPayload.toObject(SparkplugPayload.decode(new Uint8Array(input))))
|
||||||
SparkplugPayload.toObject(SparkplugPayload.decode(new Uint8Array(input)))
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
message.decoder = Decoder.SPARKPLUG
|
message.decoder = Decoder.SPARKPLUG
|
||||||
return message
|
return message
|
||||||
} catch {
|
} catch {
|
||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export interface CallbackStore {
|
export interface CallbackStore {
|
||||||
wrappedCallback: any;
|
wrappedCallback: any
|
||||||
callback: any;
|
callback: any
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { Event } from '../Events';
|
import { Event } from '../Events'
|
||||||
|
|
||||||
export interface EventBusInterface {
|
export interface EventBusInterface {
|
||||||
subscribe<MessageType>(event: Event<MessageType>, callback: (msg: MessageType) => void): void;
|
subscribe<MessageType>(event: Event<MessageType>, callback: (msg: MessageType) => void): void
|
||||||
unsubscribeAll<MessageType>(event: Event<MessageType>): void;
|
unsubscribeAll<MessageType>(event: Event<MessageType>): void
|
||||||
emit<MessageType>(event: Event<MessageType>, msg: MessageType): void;
|
emit<MessageType>(event: Event<MessageType>, msg: MessageType): void
|
||||||
unsubscribe<MessageType>(event: Event<MessageType>, callback: any): void;
|
unsubscribe<MessageType>(event: Event<MessageType>, callback: any): void
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,34 +1,34 @@
|
|||||||
import { IpcMain } from 'electron';
|
import { IpcMain } from 'electron'
|
||||||
import { Event } from '../Events';
|
import { Event } from '../Events'
|
||||||
import { EventBusInterface } from "./EventBusInterface";
|
import { EventBusInterface } from './EventBusInterface'
|
||||||
|
|
||||||
export class IpcMainEventBus implements EventBusInterface {
|
export class IpcMainEventBus implements EventBusInterface {
|
||||||
private ipc: IpcMain;
|
private ipc: IpcMain
|
||||||
private client: any;
|
private client: any
|
||||||
constructor(ipc: IpcMain) {
|
constructor(ipc: IpcMain) {
|
||||||
this.ipc = ipc;
|
this.ipc = ipc
|
||||||
}
|
}
|
||||||
|
|
||||||
public subscribe<MessageType>(subscribeEvent: Event<MessageType>, callback: (msg: MessageType) => void) {
|
public subscribe<MessageType>(subscribeEvent: Event<MessageType>, callback: (msg: MessageType) => void) {
|
||||||
console.log('subscribing', subscribeEvent.topic);
|
console.log('subscribing', subscribeEvent.topic)
|
||||||
this.ipc.on(subscribeEvent.topic, (event: any, arg: any) => {
|
this.ipc.on(subscribeEvent.topic, (event: any, arg: any) => {
|
||||||
this.client = event.sender;
|
this.client = event.sender
|
||||||
callback(arg);
|
callback(arg)
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public unsubscribeAll<MessageType>(event: Event<MessageType>) {
|
public unsubscribeAll<MessageType>(event: Event<MessageType>) {
|
||||||
console.log('unsubscribeAll', event.topic);
|
console.log('unsubscribeAll', event.topic)
|
||||||
this.ipc.removeAllListeners(event.topic);
|
this.ipc.removeAllListeners(event.topic)
|
||||||
}
|
}
|
||||||
|
|
||||||
public unsubscribe<MessageType>(event: Event<MessageType>, callback: any) {
|
public unsubscribe<MessageType>(event: Event<MessageType>, callback: any) {
|
||||||
throw new Error('Not implemented'); // Todo: implement
|
throw new Error('Not implemented') // Todo: implement
|
||||||
}
|
}
|
||||||
|
|
||||||
public emit<MessageType>(event: Event<MessageType>, msg: MessageType) {
|
public emit<MessageType>(event: Event<MessageType>, msg: MessageType) {
|
||||||
if (!this.client.isDestroyed()) {
|
if (!this.client.isDestroyed()) {
|
||||||
this.client.send(event.topic, msg);
|
this.client.send(event.topic, msg)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { CallbackStore } from "./CallbackStore"
|
import { CallbackStore } from './CallbackStore'
|
||||||
import { EventBusInterface } from "./EventBusInterface"
|
import { EventBusInterface } from './EventBusInterface'
|
||||||
import { Event } from '../Events'
|
import { Event } from '../Events'
|
||||||
import { IpcRenderer } from 'electron'
|
import { IpcRenderer } from 'electron'
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ export class IpcRendererEventBus implements EventBusInterface {
|
|||||||
const wrappedCallback = (_: any, arg: any) => {
|
const wrappedCallback = (_: any, arg: any) => {
|
||||||
callback(arg)
|
callback(arg)
|
||||||
}
|
}
|
||||||
console.log("subscribing", event.topic)
|
console.log('subscribing', event.topic)
|
||||||
this.ipc.on(event.topic, wrappedCallback)
|
this.ipc.on(event.topic, wrappedCallback)
|
||||||
this.callbacks.push({
|
this.callbacks.push({
|
||||||
callback,
|
callback,
|
||||||
|
|||||||
@@ -1,53 +1,62 @@
|
|||||||
import { Event } from '../Events';
|
import { Event } from '../Events'
|
||||||
import { EventBusInterface } from './EventBusInterface'
|
import { EventBusInterface } from './EventBusInterface'
|
||||||
import { v4 } from 'uuid';
|
import { v4 } from 'uuid'
|
||||||
|
|
||||||
export type RpcEvent<RequstType, ResponseType> = {
|
export type RpcEvent<RequestType, ResponseType> = {
|
||||||
topic: string;
|
topic: string
|
||||||
};
|
}
|
||||||
|
|
||||||
export class Rpc {
|
export class Rpc {
|
||||||
constructor(private participant: EventBusInterface) { }
|
constructor(private participant: EventBusInterface) {}
|
||||||
|
|
||||||
async call<RpcRequest, RpcResponse>(event: RpcEvent<RpcRequest, RpcResponse>, request: RpcRequest, timeout: number = 0): Promise<RpcResponse> {
|
// tslint:disable-next-line:member-access
|
||||||
return new Promise((resolve, reject) => {
|
async call<RpcRequest, RpcResponse>(
|
||||||
let id = v4();
|
event: RpcEvent<RpcRequest, RpcResponse>,
|
||||||
|
request: RpcRequest,
|
||||||
|
timeout: number = 0
|
||||||
|
): Promise<RpcResponse> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const id = v4()
|
||||||
|
|
||||||
let responseEvent: Event<any> = { topic: `${event.topic}/response/${id}` };
|
const responseEvent: Event<any> = { topic: `${event.topic}/response/${id}` }
|
||||||
let requestEvent: Event<any> = { topic: `${event.topic}/request` };
|
const requestEvent: Event<any> = { topic: `${event.topic}/request` }
|
||||||
let callback = (result: { id: string; payload: RpcResponse; error: unknown }) => {
|
const callback = (result: { id: string; payload: RpcResponse; error: unknown }) => {
|
||||||
this.participant.unsubscribe(responseEvent as any, callback);
|
this.participant.unsubscribe(responseEvent as any, callback)
|
||||||
if (result.error) {
|
if (result.error) {
|
||||||
reject(result.error)
|
reject(result.error)
|
||||||
} else {
|
} else {
|
||||||
resolve(result.payload);
|
resolve(result.payload)
|
||||||
}
|
}
|
||||||
console.log("received", result)
|
console.log('received', result)
|
||||||
};
|
}
|
||||||
this.participant.subscribe(responseEvent, callback);
|
this.participant.subscribe(responseEvent, callback)
|
||||||
this.participant.emit(requestEvent, { id, payload: request });
|
this.participant.emit(requestEvent, { id, payload: request })
|
||||||
|
|
||||||
if (timeout > 0) {
|
if (timeout > 0) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
reject(new Error(`Did not respond to ${event.topic} within ${timeout}ms`))
|
reject(new Error(`Did not respond to ${event.topic} within ${timeout}ms`))
|
||||||
this.participant.unsubscribe(responseEvent as any, callback);
|
this.participant.unsubscribe(responseEvent as any, callback)
|
||||||
}, 10000)
|
}, 10000)
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async on<RpcRequest, RpcResponse>(event: RpcEvent<RpcRequest, RpcResponse>, handler: (request: RpcRequest) => Promise<RpcResponse>) {
|
// tslint:disable-next-line:member-access
|
||||||
this.participant.subscribe<RpcRequest>({ topic: `${event.topic}/request` } as RpcEvent<any, any>, async (request) => {
|
async on<RpcRequest, RpcResponse>(
|
||||||
let payload;
|
event: RpcEvent<RpcRequest, RpcResponse>,
|
||||||
let error;
|
handler: (request: RpcRequest) => Promise<RpcResponse>
|
||||||
try {
|
) {
|
||||||
payload = await handler((request as any).payload);
|
this.participant.subscribe<RpcRequest>({ topic: `${event.topic}/request` }, async request => {
|
||||||
} catch (e) {
|
let payload
|
||||||
error = e
|
let error
|
||||||
}
|
try {
|
||||||
const id = (request as any).id
|
payload = await handler((request as any).payload)
|
||||||
console.log(`${event.topic}/response/${id}`, payload, error)
|
} catch (e) {
|
||||||
this.participant.emit({ topic: `${event.topic}/response/${id}` }, { id, payload, error });
|
error = e
|
||||||
});
|
}
|
||||||
}
|
const id = (request as any).id
|
||||||
|
console.log(`${event.topic}/response/${id}`, payload, error)
|
||||||
|
this.participant.emit({ topic: `${event.topic}/response/${id}` }, { id, payload, error })
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Base64Message } from '../backend/src/Model/Base64Message'
|
import { Base64Message } from '../backend/src/Model/Base64Message'
|
||||||
import { DataSourceState, MqttOptions } from '../backend/src/DataSource'
|
import { DataSourceState, MqttOptions } from '../backend/src/DataSource'
|
||||||
import { UpdateInfo } from 'builder-util-runtime'
|
import { UpdateInfo } from 'builder-util-runtime'
|
||||||
import { RpcEvent } from './EventSystem/Rpc';
|
import { RpcEvent } from './EventSystem/Rpc'
|
||||||
|
|
||||||
export type Event<MessageType> = {
|
export type Event<MessageType> = {
|
||||||
topic: string
|
topic: string
|
||||||
@@ -52,5 +52,5 @@ export function makeConnectionMessageEvent(connectionId: string): Event<MqttMess
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const getAppVersion: RpcEvent<void, string> = {
|
export const getAppVersion: RpcEvent<void, string> = {
|
||||||
topic: `getAppVersion`
|
topic: 'getAppVersion',
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { OpenDialogOptions, OpenDialogReturnValue } from 'electron';
|
import { OpenDialogOptions, OpenDialogReturnValue } from 'electron'
|
||||||
import { RpcEvent } from './EventSystem/Rpc';
|
import { RpcEvent } from './EventSystem/Rpc'
|
||||||
|
|
||||||
export function makeOpenDialogRpc(): RpcEvent<OpenDialogOptions, OpenDialogReturnValue> {
|
export function makeOpenDialogRpc(): RpcEvent<OpenDialogOptions, OpenDialogReturnValue> {
|
||||||
return {
|
return {
|
||||||
topic: `openDialog`
|
topic: 'openDialog',
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export * from './Events'
|
export * from './Events'
|
||||||
export * from './EventSystem/EventDispatcher'
|
export * from './EventSystem/EventDispatcher'
|
||||||
export * from './EventSystem/EventBus'
|
export * from './EventSystem/EventBus'
|
||||||
export * from './EventSystem/EventBusInterface'
|
export * from './EventSystem/EventBusInterface'
|
||||||
|
|||||||
11
package.json
11
package.json
@@ -15,8 +15,9 @@
|
|||||||
"dev": "npm-run-all --parallel dev:*",
|
"dev": "npm-run-all --parallel dev:*",
|
||||||
"dev:app": "cd app && npm run dev",
|
"dev:app": "cd app && npm run dev",
|
||||||
"dev:electron": "tsc && electron . --development",
|
"dev:electron": "tsc && electron . --development",
|
||||||
"lint": "npm-run-all --parallel lint:prettier lint:tslint lint:spellcheck",
|
"lint": "npm-run-all --parallel lint:prettier lint:tslint",
|
||||||
"lint:prettier": "prettier --check \"**/*.ts{x,}\"",
|
"lint:prettier": "prettier --check \"**/*.ts{x,}\"",
|
||||||
|
"lint:prettier:fix": "prettier --write \"**/*.ts{x,}\"",
|
||||||
"lint:tslint": "tslint -p ./",
|
"lint:tslint": "tslint -p ./",
|
||||||
"lint:spellcheck": "cspell -e ./build -e \"node_modules\" \"**/*.ts{x,}\"",
|
"lint:spellcheck": "cspell -e ./build -e \"node_modules\" \"**/*.ts{x,}\"",
|
||||||
"build": "tsc && cd app && yarn run build && cd ..",
|
"build": "tsc && cd app && yarn run build && cd ..",
|
||||||
@@ -93,11 +94,15 @@
|
|||||||
"mustache": "4",
|
"mustache": "4",
|
||||||
"npm-run-all": "^4.1.5",
|
"npm-run-all": "^4.1.5",
|
||||||
"nyc": "15",
|
"nyc": "15",
|
||||||
"prettier": "2",
|
"prettier": "^3.2.5",
|
||||||
"redux-thunk": "^2.3.0",
|
"redux-thunk": "^2.3.0",
|
||||||
"source-map-support": "^0.5.9",
|
"source-map-support": "^0.5.9",
|
||||||
"spectron": "19",
|
"spectron": "19",
|
||||||
"ts-node": "^10.5.0",
|
"ts-node": "^10.5.0",
|
||||||
|
"tslint": "^6.1.3",
|
||||||
|
"tslint-config-airbnb": "^5.11.2",
|
||||||
|
"tslint-react": "^5.0.0",
|
||||||
|
"tslint-react-recommended": "^1.0.15",
|
||||||
"typescript": "^4.5.5",
|
"typescript": "^4.5.5",
|
||||||
"webdriverio": "7.16"
|
"webdriverio": "7.16"
|
||||||
},
|
},
|
||||||
@@ -118,4 +123,4 @@
|
|||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
"yarn-run-all": "^3.1.1"
|
"yarn-run-all": "^3.1.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@ registerCrashReporter()
|
|||||||
|
|
||||||
app.commandLine.appendSwitch('--no-sandbox')
|
app.commandLine.appendSwitch('--no-sandbox')
|
||||||
app.whenReady().then(() => {
|
app.whenReady().then(() => {
|
||||||
backendRpc.on(makeOpenDialogRpc(), async (request) => {
|
backendRpc.on(makeOpenDialogRpc(), async request => {
|
||||||
return dialog.showOpenDialog(BrowserWindow.getFocusedWindow() ?? BrowserWindow.getAllWindows()[0], request)
|
return dialog.showOpenDialog(BrowserWindow.getFocusedWindow() ?? BrowserWindow.getAllWindows()[0], request)
|
||||||
})
|
})
|
||||||
backendRpc.on(getAppVersion, async () => app.getVersion())
|
backendRpc.on(getAppVersion, async () => app.getVersion())
|
||||||
|
|||||||
@@ -29,7 +29,12 @@ export async function writeText(text: string, browser: Browser<'async'>, delay =
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function deleteTextWithBackspaces(element: Element<'async'>, browser: Browser<'async'>, delay = 0, count = 0) {
|
export async function deleteTextWithBackspaces(
|
||||||
|
element: Element<'async'>,
|
||||||
|
browser: Browser<'async'>,
|
||||||
|
delay = 0,
|
||||||
|
count = 0
|
||||||
|
) {
|
||||||
const length = count > 0 ? count : (await element.getValue()).length
|
const length = count > 0 ? count : (await element.getValue()).length
|
||||||
for (let i = 0; i < length; i += 1) {
|
for (let i = 0; i < length; i += 1) {
|
||||||
await browser.keys(['Backspace'])
|
await browser.keys(['Backspace'])
|
||||||
|
|||||||
261
yarn.lock
261
yarn.lock
@@ -14,6 +14,14 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@jridgewell/trace-mapping" "^0.3.0"
|
"@jridgewell/trace-mapping" "^0.3.0"
|
||||||
|
|
||||||
|
"@babel/code-frame@^7.0.0":
|
||||||
|
version "7.23.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
|
||||||
|
integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/highlight" "^7.23.4"
|
||||||
|
chalk "^2.4.2"
|
||||||
|
|
||||||
"@babel/code-frame@^7.16.7":
|
"@babel/code-frame@^7.16.7":
|
||||||
version "7.16.7"
|
version "7.16.7"
|
||||||
resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz"
|
resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz"
|
||||||
@@ -136,6 +144,11 @@
|
|||||||
resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz"
|
resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz"
|
||||||
integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
|
integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
|
||||||
|
|
||||||
|
"@babel/helper-validator-identifier@^7.22.20":
|
||||||
|
version "7.22.20"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
|
||||||
|
integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
|
||||||
|
|
||||||
"@babel/helper-validator-option@^7.16.7":
|
"@babel/helper-validator-option@^7.16.7":
|
||||||
version "7.16.7"
|
version "7.16.7"
|
||||||
resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz"
|
resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz"
|
||||||
@@ -159,6 +172,15 @@
|
|||||||
chalk "^2.0.0"
|
chalk "^2.0.0"
|
||||||
js-tokens "^4.0.0"
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
|
"@babel/highlight@^7.23.4":
|
||||||
|
version "7.23.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b"
|
||||||
|
integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-validator-identifier" "^7.22.20"
|
||||||
|
chalk "^2.4.2"
|
||||||
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
"@babel/parser@^7.16.7", "@babel/parser@^7.17.3":
|
"@babel/parser@^7.16.7", "@babel/parser@^7.17.3":
|
||||||
version "7.17.3"
|
version "7.17.3"
|
||||||
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz"
|
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz"
|
||||||
@@ -421,6 +443,25 @@
|
|||||||
dir-compare "^2.4.0"
|
dir-compare "^2.4.0"
|
||||||
fs-extra "^9.0.1"
|
fs-extra "^9.0.1"
|
||||||
|
|
||||||
|
"@fimbul/bifrost@^0.21.0":
|
||||||
|
version "0.21.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@fimbul/bifrost/-/bifrost-0.21.0.tgz#d0fafa25938fda475657a6a1e407a21bbe02c74e"
|
||||||
|
integrity sha512-ou8VU+nTmOW1jeg+FT+sn+an/M0Xb9G16RucrfhjXGWv1Q97kCoM5CG9Qj7GYOSdu7km72k7nY83Eyr53Bkakg==
|
||||||
|
dependencies:
|
||||||
|
"@fimbul/ymir" "^0.21.0"
|
||||||
|
get-caller-file "^2.0.0"
|
||||||
|
tslib "^1.8.1"
|
||||||
|
tsutils "^3.5.0"
|
||||||
|
|
||||||
|
"@fimbul/ymir@^0.21.0":
|
||||||
|
version "0.21.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@fimbul/ymir/-/ymir-0.21.0.tgz#8525726787aceeafd4e199472c0d795160b5d4a1"
|
||||||
|
integrity sha512-T/y7WqPsm4n3zhT08EpB5sfdm2Kvw3gurAxr2Lr5dQeLi8ZsMlNT/Jby+ZmuuAAd1PnXYzKp+2SXgIkQIIMCUg==
|
||||||
|
dependencies:
|
||||||
|
inversify "^5.0.0"
|
||||||
|
reflect-metadata "^0.1.12"
|
||||||
|
tslib "^1.8.1"
|
||||||
|
|
||||||
"@istanbuljs/load-nyc-config@^1.0.0":
|
"@istanbuljs/load-nyc-config@^1.0.0":
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz"
|
resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz"
|
||||||
@@ -1286,6 +1327,11 @@ builder-util@22.14.13:
|
|||||||
stat-mode "^1.0.0"
|
stat-mode "^1.0.0"
|
||||||
temp-file "^3.4.0"
|
temp-file "^3.4.0"
|
||||||
|
|
||||||
|
builtin-modules@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
|
||||||
|
integrity sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==
|
||||||
|
|
||||||
cacheable-lookup@^5.0.3:
|
cacheable-lookup@^5.0.3:
|
||||||
version "5.0.4"
|
version "5.0.4"
|
||||||
resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz"
|
resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz"
|
||||||
@@ -1374,7 +1420,7 @@ chalk@^1.1.3:
|
|||||||
strip-ansi "^3.0.0"
|
strip-ansi "^3.0.0"
|
||||||
supports-color "^2.0.0"
|
supports-color "^2.0.0"
|
||||||
|
|
||||||
chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
|
chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
|
||||||
version "2.4.2"
|
version "2.4.2"
|
||||||
resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
|
resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
|
||||||
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
|
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
|
||||||
@@ -1546,6 +1592,11 @@ commander@2.9.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
graceful-readlink ">= 1.0.0"
|
graceful-readlink ">= 1.0.0"
|
||||||
|
|
||||||
|
commander@^2.12.1:
|
||||||
|
version "2.20.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||||
|
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||||
|
|
||||||
commander@^5.0.0:
|
commander@^5.0.0:
|
||||||
version "5.1.0"
|
version "5.1.0"
|
||||||
resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz"
|
resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz"
|
||||||
@@ -2037,6 +2088,14 @@ dmg-license@^1.0.9:
|
|||||||
smart-buffer "^4.0.2"
|
smart-buffer "^4.0.2"
|
||||||
verror "^1.10.0"
|
verror "^1.10.0"
|
||||||
|
|
||||||
|
doctrine@0.7.2:
|
||||||
|
version "0.7.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523"
|
||||||
|
integrity sha512-qiB/Rir6Un6Ad/TIgTRzsremsTGWzs8j7woXvp14jgq00676uBiBT5eUOi+FgRywZFVy5Us/c04ISRpZhRbS6w==
|
||||||
|
dependencies:
|
||||||
|
esutils "^1.1.6"
|
||||||
|
isarray "0.0.1"
|
||||||
|
|
||||||
dot-prop@^5.0.0, dot-prop@^5.2.0:
|
dot-prop@^5.0.0, dot-prop@^5.2.0:
|
||||||
version "5.3.0"
|
version "5.3.0"
|
||||||
resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz"
|
resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz"
|
||||||
@@ -2280,6 +2339,11 @@ esprima@^4.0.0, esprima@^4.0.1:
|
|||||||
resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
|
resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
|
||||||
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
||||||
|
|
||||||
|
esutils@^1.1.6:
|
||||||
|
version "1.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375"
|
||||||
|
integrity sha512-RG1ZkUT7iFJG9LSHr7KDuuMSlujfeTtMNIcInURxKAxhMtwQhI3NrQhz26gZQYlsYZQKzsnwtpKrFKj9K9Qu1A==
|
||||||
|
|
||||||
event-stream@=3.3.4:
|
event-stream@=3.3.4:
|
||||||
version "3.3.4"
|
version "3.3.4"
|
||||||
resolved "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz"
|
resolved "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz"
|
||||||
@@ -2481,6 +2545,11 @@ function-bind@^1.1.1:
|
|||||||
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
|
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
|
||||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||||
|
|
||||||
|
function-bind@^1.1.2:
|
||||||
|
version "1.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
|
||||||
|
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
|
||||||
|
|
||||||
gensequence@^3.1.1:
|
gensequence@^3.1.1:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
resolved "https://registry.npmjs.org/gensequence/-/gensequence-3.1.1.tgz"
|
resolved "https://registry.npmjs.org/gensequence/-/gensequence-3.1.1.tgz"
|
||||||
@@ -2491,7 +2560,7 @@ gensync@^1.0.0-beta.2:
|
|||||||
resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"
|
resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"
|
||||||
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
|
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
|
||||||
|
|
||||||
get-caller-file@^2.0.1, get-caller-file@^2.0.5:
|
get-caller-file@^2.0.0, get-caller-file@^2.0.1, get-caller-file@^2.0.5:
|
||||||
version "2.0.5"
|
version "2.0.5"
|
||||||
resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
|
resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
|
||||||
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
|
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
|
||||||
@@ -2566,6 +2635,18 @@ glob@7.1.3:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
path-is-absolute "^1.0.0"
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
|
glob@^7.1.1:
|
||||||
|
version "7.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
|
||||||
|
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
|
||||||
|
dependencies:
|
||||||
|
fs.realpath "^1.0.0"
|
||||||
|
inflight "^1.0.4"
|
||||||
|
inherits "2"
|
||||||
|
minimatch "^3.1.1"
|
||||||
|
once "^1.3.0"
|
||||||
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
|
glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
|
||||||
version "7.2.0"
|
version "7.2.0"
|
||||||
resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz"
|
resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz"
|
||||||
@@ -2739,6 +2820,13 @@ hasha@^5.0.0:
|
|||||||
is-stream "^2.0.0"
|
is-stream "^2.0.0"
|
||||||
type-fest "^0.8.0"
|
type-fest "^0.8.0"
|
||||||
|
|
||||||
|
hasown@^2.0.0:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa"
|
||||||
|
integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==
|
||||||
|
dependencies:
|
||||||
|
function-bind "^1.1.2"
|
||||||
|
|
||||||
he@1.2.0:
|
he@1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
|
resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
|
||||||
@@ -2866,6 +2954,11 @@ internal-slot@^1.0.3:
|
|||||||
has "^1.0.3"
|
has "^1.0.3"
|
||||||
side-channel "^1.0.4"
|
side-channel "^1.0.4"
|
||||||
|
|
||||||
|
inversify@^5.0.0:
|
||||||
|
version "5.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/inversify/-/inversify-5.1.1.tgz#6fbd668c591337404e005a1946bfe0d802c08730"
|
||||||
|
integrity sha512-j8grHGDzv1v+8T1sAQ+3boTCntFPfvxLCkNcxB1J8qA0lUN+fAlSyYd+RXKvaPRL4AGyPxViutBEJHNXOyUdFQ==
|
||||||
|
|
||||||
is-arrayish@^0.2.1:
|
is-arrayish@^0.2.1:
|
||||||
version "0.2.1"
|
version "0.2.1"
|
||||||
resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
|
resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
|
||||||
@@ -2917,6 +3010,13 @@ is-ci@^3.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ci-info "^3.2.0"
|
ci-info "^3.2.0"
|
||||||
|
|
||||||
|
is-core-module@^2.13.0:
|
||||||
|
version "2.13.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
|
||||||
|
integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
|
||||||
|
dependencies:
|
||||||
|
hasown "^2.0.0"
|
||||||
|
|
||||||
is-date-object@^1.0.1:
|
is-date-object@^1.0.1:
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz"
|
resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz"
|
||||||
@@ -3062,6 +3162,11 @@ is-yarn-global@^0.3.0:
|
|||||||
resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz"
|
resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz"
|
||||||
integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
|
integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
|
||||||
|
|
||||||
|
isarray@0.0.1:
|
||||||
|
version "0.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
|
||||||
|
integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
|
||||||
|
|
||||||
isarray@~1.0.0:
|
isarray@~1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
|
resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
|
||||||
@@ -3567,6 +3672,13 @@ minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4:
|
|||||||
dependencies:
|
dependencies:
|
||||||
brace-expansion "^1.1.7"
|
brace-expansion "^1.1.7"
|
||||||
|
|
||||||
|
minimatch@^3.1.1:
|
||||||
|
version "3.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||||
|
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^1.1.7"
|
||||||
|
|
||||||
minimatch@^5.0.0:
|
minimatch@^5.0.0:
|
||||||
version "5.0.1"
|
version "5.0.1"
|
||||||
resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz"
|
resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz"
|
||||||
@@ -3579,6 +3691,11 @@ minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.5:
|
|||||||
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"
|
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"
|
||||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||||
|
|
||||||
|
minimist@^1.2.6:
|
||||||
|
version "1.2.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
|
||||||
|
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
|
||||||
|
|
||||||
mkdirp-classic@^0.5.2:
|
mkdirp-classic@^0.5.2:
|
||||||
version "0.5.3"
|
version "0.5.3"
|
||||||
resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz"
|
resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz"
|
||||||
@@ -3591,6 +3708,13 @@ mkdirp@0.5.3:
|
|||||||
dependencies:
|
dependencies:
|
||||||
minimist "^1.2.5"
|
minimist "^1.2.5"
|
||||||
|
|
||||||
|
mkdirp@^0.5.3:
|
||||||
|
version "0.5.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
|
||||||
|
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
|
||||||
|
dependencies:
|
||||||
|
minimist "^1.2.6"
|
||||||
|
|
||||||
mkdirp@^0.5.4:
|
mkdirp@^0.5.4:
|
||||||
version "0.5.5"
|
version "0.5.5"
|
||||||
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"
|
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"
|
||||||
@@ -3975,6 +4099,11 @@ path-parse@^1.0.6:
|
|||||||
resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz"
|
resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz"
|
||||||
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
||||||
|
|
||||||
|
path-parse@^1.0.7:
|
||||||
|
version "1.0.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||||
|
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||||
|
|
||||||
path-type@^1.0.0:
|
path-type@^1.0.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz"
|
resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz"
|
||||||
@@ -4065,10 +4194,10 @@ prepend-http@^2.0.0:
|
|||||||
resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz"
|
resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz"
|
||||||
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
|
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
|
||||||
|
|
||||||
prettier@2:
|
prettier@^3.2.5:
|
||||||
version "2.0.4"
|
version "3.2.5"
|
||||||
resolved "https://registry.npmjs.org/prettier/-/prettier-2.0.4.tgz"
|
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368"
|
||||||
integrity sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w==
|
integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==
|
||||||
|
|
||||||
printj@~1.3.1:
|
printj@~1.3.1:
|
||||||
version "1.3.1"
|
version "1.3.1"
|
||||||
@@ -4269,6 +4398,11 @@ redux-thunk@^2.3.0:
|
|||||||
resolved "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz"
|
resolved "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz"
|
||||||
integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
|
integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
|
||||||
|
|
||||||
|
reflect-metadata@^0.1.12:
|
||||||
|
version "0.1.14"
|
||||||
|
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.14.tgz#24cf721fe60677146bb77eeb0e1f9dece3d65859"
|
||||||
|
integrity sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==
|
||||||
|
|
||||||
regenerator-runtime@^0.13.4:
|
regenerator-runtime@^0.13.4:
|
||||||
version "0.13.9"
|
version "0.13.9"
|
||||||
resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
|
resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
|
||||||
@@ -4339,6 +4473,15 @@ resolve@^1.10.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
path-parse "^1.0.6"
|
path-parse "^1.0.6"
|
||||||
|
|
||||||
|
resolve@^1.3.2:
|
||||||
|
version "1.22.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
|
||||||
|
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
|
||||||
|
dependencies:
|
||||||
|
is-core-module "^2.13.0"
|
||||||
|
path-parse "^1.0.7"
|
||||||
|
supports-preserve-symlinks-flag "^1.0.0"
|
||||||
|
|
||||||
responselike@^1.0.2:
|
responselike@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz"
|
resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz"
|
||||||
@@ -4433,6 +4576,11 @@ semver-diff@^3.1.1:
|
|||||||
resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
|
resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
|
||||||
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||||
|
|
||||||
|
semver@^5.3.0:
|
||||||
|
version "5.7.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
|
||||||
|
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
|
||||||
|
|
||||||
semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
|
semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
|
||||||
version "6.3.0"
|
version "6.3.0"
|
||||||
resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
|
resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
|
||||||
@@ -4808,6 +4956,11 @@ supports-color@^7.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
has-flag "^4.0.0"
|
has-flag "^4.0.0"
|
||||||
|
|
||||||
|
supports-preserve-symlinks-flag@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
|
||||||
|
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||||
|
|
||||||
tar-fs@2.1.1:
|
tar-fs@2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz"
|
resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz"
|
||||||
@@ -4913,6 +5066,102 @@ ts-node@^10.5.0:
|
|||||||
v8-compile-cache-lib "^3.0.0"
|
v8-compile-cache-lib "^3.0.0"
|
||||||
yn "3.1.1"
|
yn "3.1.1"
|
||||||
|
|
||||||
|
tslib@1.9.0:
|
||||||
|
version "1.9.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8"
|
||||||
|
integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==
|
||||||
|
|
||||||
|
tslib@^1.13.0, tslib@^1.7.1, tslib@^1.8.1:
|
||||||
|
version "1.14.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||||
|
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
|
||||||
|
|
||||||
|
tslint-config-airbnb@^5.11.2:
|
||||||
|
version "5.11.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslint-config-airbnb/-/tslint-config-airbnb-5.11.2.tgz#2f3d239fa3923be8e7a4372217a7ed552671528f"
|
||||||
|
integrity sha512-mUpHPTeeCFx8XARGG/kzYP4dPSOgoCqNiYbGHh09qTH8q+Y1ghsOgaeZKYYQT7IyxMos523z/QBaiv2zKNBcow==
|
||||||
|
dependencies:
|
||||||
|
tslint-consistent-codestyle "^1.14.1"
|
||||||
|
tslint-eslint-rules "^5.4.0"
|
||||||
|
tslint-microsoft-contrib "~5.2.1"
|
||||||
|
|
||||||
|
tslint-consistent-codestyle@^1.14.1:
|
||||||
|
version "1.16.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.16.0.tgz#52348ea899a7e025b37cc6545751c6a566a19077"
|
||||||
|
integrity sha512-ebR/xHyMEuU36hGNOgCfjGBNYxBPixf0yU1Yoo6s3BrpBRFccjPOmIVaVvQsWAUAMdmfzHOCihVkcaMfimqvHw==
|
||||||
|
dependencies:
|
||||||
|
"@fimbul/bifrost" "^0.21.0"
|
||||||
|
tslib "^1.7.1"
|
||||||
|
tsutils "^2.29.0"
|
||||||
|
|
||||||
|
tslint-eslint-rules@^5.4.0:
|
||||||
|
version "5.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz#e488cc9181bf193fe5cd7bfca213a7695f1737b5"
|
||||||
|
integrity sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w==
|
||||||
|
dependencies:
|
||||||
|
doctrine "0.7.2"
|
||||||
|
tslib "1.9.0"
|
||||||
|
tsutils "^3.0.0"
|
||||||
|
|
||||||
|
tslint-microsoft-contrib@~5.2.1:
|
||||||
|
version "5.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz#a6286839f800e2591d041ea2800c77487844ad81"
|
||||||
|
integrity sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA==
|
||||||
|
dependencies:
|
||||||
|
tsutils "^2.27.2 <2.29.0"
|
||||||
|
|
||||||
|
tslint-react-recommended@^1.0.15:
|
||||||
|
version "1.0.15"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslint-react-recommended/-/tslint-react-recommended-1.0.15.tgz#4166dc7d87b57280110673c99315a35ac5a76a7e"
|
||||||
|
integrity sha512-kEPJ+8D4Di30vqcU9ogFHXubyFvphM41EDb7ISnVuIhS0Zes8CntcgG9d9WDZvhPIjyd9pXvLOqc61RA450cpw==
|
||||||
|
|
||||||
|
tslint-react@^5.0.0:
|
||||||
|
version "5.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-5.0.0.tgz#d0ae644e8163bdd3e134012e9353094904e8dd44"
|
||||||
|
integrity sha512-/IbcSmoBPlFic8kQaRfQ4knTY4mivwo5LVzvozvX6Dyu2ynEnrh1dIcR2ujjyp/IodXqY/H5GbxFxSMo/Kf2Hg==
|
||||||
|
dependencies:
|
||||||
|
tsutils "^3.17.1"
|
||||||
|
|
||||||
|
tslint@^6.1.3:
|
||||||
|
version "6.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904"
|
||||||
|
integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/code-frame" "^7.0.0"
|
||||||
|
builtin-modules "^1.1.1"
|
||||||
|
chalk "^2.3.0"
|
||||||
|
commander "^2.12.1"
|
||||||
|
diff "^4.0.1"
|
||||||
|
glob "^7.1.1"
|
||||||
|
js-yaml "^3.13.1"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
mkdirp "^0.5.3"
|
||||||
|
resolve "^1.3.2"
|
||||||
|
semver "^5.3.0"
|
||||||
|
tslib "^1.13.0"
|
||||||
|
tsutils "^2.29.0"
|
||||||
|
|
||||||
|
"tsutils@^2.27.2 <2.29.0":
|
||||||
|
version "2.28.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.28.0.tgz#6bd71e160828f9d019b6f4e844742228f85169a1"
|
||||||
|
integrity sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.8.1"
|
||||||
|
|
||||||
|
tsutils@^2.29.0:
|
||||||
|
version "2.29.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
|
||||||
|
integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.8.1"
|
||||||
|
|
||||||
|
tsutils@^3.0.0, tsutils@^3.17.1, tsutils@^3.5.0:
|
||||||
|
version "3.21.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
|
||||||
|
integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.8.1"
|
||||||
|
|
||||||
tunnel@^0.0.6:
|
tunnel@^0.0.6:
|
||||||
version "0.0.6"
|
version "0.0.6"
|
||||||
resolved "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz"
|
resolved "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz"
|
||||||
|
|||||||
Reference in New Issue
Block a user