diff --git a/.eslintrc.yaml b/.eslintrc.yaml index 970d539464f..6ab9b992f80 100644 --- a/.eslintrc.yaml +++ b/.eslintrc.yaml @@ -3,17 +3,21 @@ env: es6: true node: true -ignorePatterns: - - "app/**/*.js" # ignore flow files for now +plugins: + - react + - react-hooks + - "@typescript-eslint" + - header extends: - - "eslint:recommended" - - "plugin:react/recommended" - - "plugin:@typescript-eslint/eslint-recommended" - - "plugin:@typescript-eslint/recommended" - - "plugin:import/errors" - - "plugin:import/warnings" - - "plugin:import/typescript" + - eslint:recommended + - plugin:react/recommended + - plugin:@typescript-eslint/eslint-recommended + - plugin:@typescript-eslint/recommended + - plugin:import/errors + - plugin:import/warnings + - plugin:import/typescript + - plugin:prettier/recommended parser: "@typescript-eslint/parser" parserOptions: @@ -24,23 +28,23 @@ parserOptions: sourceType: module project: tsconfig.json -plugins: - - "@typescript-eslint" - - "header" - - "react" - - "react-hooks" +settings: + react: + version: detect + import/internal-regex: "^@foxglove-studio/" rules: + no-console: off # configured in no-restricted-syntax "@typescript-eslint/ban-ts-comment": off # TODO: remove once we fix all TS issues # It's sometimes useful to explicitly name to guard against future changes "@typescript-eslint/no-inferrable-types": off "@typescript-eslint/no-empty-function": off "@typescript-eslint/prefer-nullish-coalescing": warn - "react/react-in-jsx-scope": off - "react/prop-types": warn - "react-hooks/rules-of-hooks": error - "react-hooks/exhaustive-deps": error - "header/header": + react/react-in-jsx-scope: off + react/prop-types: warn + react-hooks/rules-of-hooks: error + react-hooks/exhaustive-deps: error + header/header: - error - line # We do not provide a default license header template, because eslint-plugin-header @@ -48,7 +52,33 @@ rules: - pattern: "^ This Source Code Form" template: null -settings: - "import/ignore": ["\\.js$"] # ignore flow files for now - react: - version: detect + curly: error + "@typescript-eslint/no-unused-vars": + [error, { vars: all, args: after-used, varsIgnorePattern: "^_", argsIgnorePattern: "^_" }] + no-underscore-dangle: [error, { allowAfterThis: true }] + # Some good ones that people really should be adding to import/recommended: + import/first: error + import/no-self-import: error + import/no-useless-path-segments: error + import/no-mutable-exports: error + import/newline-after-import: error + import/no-duplicates: error # https://github.com/benmosher/eslint-plugin-import/issues/242#issuecomment-230118951 + # Group imports into two groups: packages and files. Sort alphabetically + # within those groups. + import/order: + - error + - alphabetize: { order: asc } + newlines-between: always + groups: [[builtin, external], [internal, parent, sibling, index]] + + prefer-arrow-callback: [error, { allowNamedFunctions: true }] + "@typescript-eslint/no-shadow": error + no-restricted-syntax: + - error + - selector: "MethodDefinition[kind='get'], Property[kind='get']" + message: "Property getters are not allowed; prefer function syntax instead." + - selector: "MethodDefinition[kind='set'], Property[kind='set']" + message: "Property setters are not allowed; prefer function syntax instead." + # We disable console methods here rather than using no-console so that it doesn't prohibit overrides such as "console.info = ..." + - selector: "CallExpression[callee.object.name='console'][callee.property.name!=/^(warn|error|debug|assert)$/]" + message: "Unexpected property on console object was called" diff --git a/.vscode/settings.json b/.vscode/settings.json index 7d6a4001279..2d631ffa4ee 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,5 +7,9 @@ "**/bower_components": true, "**/*.code-search": true, ".yarn/**": true + }, + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true } } diff --git a/app/.eslintrc.yaml b/app/.eslintrc.yaml index 77f5558997e..a2ca7607de9 100644 --- a/app/.eslintrc.yaml +++ b/app/.eslintrc.yaml @@ -1,2 +1,6 @@ parserOptions: project: app/tsconfig.json +settings: + import/resolver: + webpack: + config: ./webpack.renderer.config.ts diff --git a/app/App.tsx b/app/App.tsx index 9233f24c962..65bcbdaef56 100644 --- a/app/App.tsx +++ b/app/App.tsx @@ -4,12 +4,11 @@ import { useEffect, useState } from "react"; +import { OsContextSingleton } from "@foxglove-studio/app/OsContext"; import { FileContext } from "@foxglove-studio/app/components/FileContext"; import Root from "@foxglove-studio/app/components/Root"; -import { ROSBRIDGE_WEBSOCKET_URL_QUERY_KEY } from "@foxglove-studio/app/util/globalConstants"; - -import { OsContextSingleton } from "@foxglove-studio/app/OsContext"; import { usePrompt } from "@foxglove-studio/app/hooks/usePrompt"; +import { ROSBRIDGE_WEBSOCKET_URL_QUERY_KEY } from "@foxglove-studio/app/util/globalConstants"; function App() { const [bagFile, setBagFile] = useState(); diff --git a/app/GlobalConfig.ts b/app/GlobalConfig.ts index 8018d4c6e62..b1bcd5d5ce1 100644 --- a/app/GlobalConfig.ts +++ b/app/GlobalConfig.ts @@ -39,7 +39,6 @@ const defaultHooks = { throw new Error(`Failed to fetch layout from URL: ${e.message}`); }); }, - getDemoModeComponent: () => null, async importHooksAsync() { return new Promise((resolve, reject) => { if (importedPanelsByCategory && importedPerPanelHooks) { @@ -157,7 +156,7 @@ const defaultHooks = { const { REMOTE_BAG_URL_2_QUERY_KEY } = require("@foxglove-studio/app/util/globalConstants"); return [REMOTE_BAG_URL_2_QUERY_KEY]; }, - updateUrlToTrackLayoutChanges: async (opt: { store: Store; skipPatch: boolean }) => { + updateUrlToTrackLayoutChanges: async (_opt: { store: Store; skipPatch: boolean }) => { // Persist the layout state in URL or remote storage if needed. await Promise.resolve(); }, diff --git a/app/PanelAPI/useBlocksByTopic.test.tsx b/app/PanelAPI/useBlocksByTopic.test.tsx index 8a411ba0f0a..2dcbe8a9639 100644 --- a/app/PanelAPI/useBlocksByTopic.test.tsx +++ b/app/PanelAPI/useBlocksByTopic.test.tsx @@ -17,7 +17,6 @@ import * as React from "react"; import { MessageReader, parseMessageDefinition } from "rosbag"; import * as PanelAPI from "."; - import { MockMessagePipelineProvider } from "@foxglove-studio/app/components/MessagePipeline"; describe("useBlocksByTopic", () => { diff --git a/app/PanelAPI/useBlocksByTopic.ts b/app/PanelAPI/useBlocksByTopic.ts index 158ceeb8d09..34523bfed16 100644 --- a/app/PanelAPI/useBlocksByTopic.ts +++ b/app/PanelAPI/useBlocksByTopic.ts @@ -11,13 +11,12 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $ReadOnly } from "utility-types"; import memoizeWeak from "memoize-weak"; import { useCallback, useContext, useEffect, useMemo, useState } from "react"; import { MessageReader } from "rosbag"; +import { $ReadOnly } from "utility-types"; import uuid from "uuid"; -import useCleanup from "@foxglove-studio/app/hooks/useCleanup"; import { useMessagePipeline, MessagePipelineContext, @@ -25,6 +24,7 @@ import { import PanelContext from "@foxglove-studio/app/components/PanelContext"; import { MemoryCacheBlock } from "@foxglove-studio/app/dataProviders/MemoryCacheDataProvider"; import ParsedMessageCache from "@foxglove-studio/app/dataProviders/ParsedMessageCache"; +import useCleanup from "@foxglove-studio/app/hooks/useCleanup"; import { BobjectMessage, SubscribePayload, diff --git a/app/PanelAPI/useDataSourceInfo.test.tsx b/app/PanelAPI/useDataSourceInfo.test.tsx index f49685d3270..88ff29ed443 100644 --- a/app/PanelAPI/useDataSourceInfo.test.tsx +++ b/app/PanelAPI/useDataSourceInfo.test.tsx @@ -15,7 +15,6 @@ import { mount } from "enzyme"; import * as React from "react"; import * as PanelAPI from "."; - import { MockMessagePipelineProvider } from "@foxglove-studio/app/components/MessagePipeline"; describe("useDataSourceInfo", () => { diff --git a/app/PanelAPI/useMessageReducer.ts b/app/PanelAPI/useMessageReducer.ts index b721140182d..43e60029c2c 100644 --- a/app/PanelAPI/useMessageReducer.ts +++ b/app/PanelAPI/useMessageReducer.ts @@ -11,16 +11,15 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import { useRef, useCallback, useMemo, useState, useEffect, useContext } from "react"; import uuid from "uuid"; -import useCleanup from "@foxglove-studio/app/hooks/useCleanup"; import { useMessagePipeline, MessagePipelineContext, } from "@foxglove-studio/app/components/MessagePipeline"; import PanelContext from "@foxglove-studio/app/components/PanelContext"; +import useCleanup from "@foxglove-studio/app/hooks/useCleanup"; import { Message, MessageFormat, SubscribePayload } from "@foxglove-studio/app/players/types"; import { useChangeDetector, diff --git a/app/PanelAPI/useMessagesByTopic.ts b/app/PanelAPI/useMessagesByTopic.ts index dd0b9751d3c..8d5713003f3 100644 --- a/app/PanelAPI/useMessagesByTopic.ts +++ b/app/PanelAPI/useMessagesByTopic.ts @@ -11,9 +11,9 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $ReadOnly } from "utility-types"; import { groupBy } from "lodash"; import { useCallback } from "react"; +import { $ReadOnly } from "utility-types"; import { useMessageReducer } from "./useMessageReducer"; import { Message, TypedMessage, MessageFormat } from "@foxglove-studio/app/players/types"; diff --git a/app/actions/panels.ts b/app/actions/panels.ts index 90a03e6ba26..8492c72ca3e 100644 --- a/app/actions/panels.ts +++ b/app/actions/panels.ts @@ -11,10 +11,10 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. import CBOR from "cbor-js"; +import { create as JsonDiffCreate } from "jsondiffpatch"; import { cloneDeep } from "lodash"; import { MosaicPath } from "react-mosaic-component"; import zlib from "zlib"; -import { create as JsonDiffCreate } from "jsondiffpatch"; import { getGlobalHooks } from "@foxglove-studio/app/loadWebviz"; import { LinkedGlobalVariables } from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/useLinkedGlobalVariables"; diff --git a/app/components/ButtonBase.tsx b/app/components/ButtonBase.tsx index 9ee853685dc..bfcf5898b72 100644 --- a/app/components/ButtonBase.tsx +++ b/app/components/ButtonBase.tsx @@ -11,8 +11,8 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Values } from "utility-types"; import cx from "classnames"; +import { $Values } from "utility-types"; export const PROGRESS_DIRECTION = Object.freeze({ HORIZONTAL: "horizontal", diff --git a/app/components/ContextMenu/index.tsx b/app/components/ContextMenu/index.tsx index c3b56f44464..fb82bfa4891 100644 --- a/app/components/ContextMenu/index.tsx +++ b/app/components/ContextMenu/index.tsx @@ -13,8 +13,8 @@ import * as React from "react"; -import Tooltip from "@foxglove-studio/app/components/TooltipBase"; import Menu from "@foxglove-studio/app/components/Menu"; +import Tooltip from "@foxglove-studio/app/components/TooltipBase"; type Props = { children: React.ReactNode; diff --git a/app/components/ExperimentalFeatures.tsx b/app/components/ExperimentalFeatures.tsx index c8197db013d..d6ad7f54c76 100644 --- a/app/components/ExperimentalFeatures.tsx +++ b/app/components/ExperimentalFeatures.tsx @@ -23,8 +23,8 @@ import TextContent from "@foxglove-studio/app/components/TextContent"; import Tooltip from "@foxglove-studio/app/components/Tooltip"; import { getGlobalHooks } from "@foxglove-studio/app/loadWebviz"; import colors from "@foxglove-studio/app/styles/colors.module.scss"; -import logEvent, { getEventNames } from "@foxglove-studio/app/util/logEvent"; import Storage from "@foxglove-studio/app/util/Storage"; +import logEvent, { getEventNames } from "@foxglove-studio/app/util/logEvent"; // All these are exported for tests; please don't use them directly in your code. export type FeatureDescriptions = { diff --git a/app/components/GlobalKeyListener.ts b/app/components/GlobalKeyListener.ts index 533791e1ae5..2e6a958baf9 100644 --- a/app/components/GlobalKeyListener.ts +++ b/app/components/GlobalKeyListener.ts @@ -14,9 +14,9 @@ import { useCallback, useMemo, useContext } from "react"; import { useDispatch } from "react-redux"; import { bindActionCreators } from "redux"; -import useEventListener from "@foxglove-studio/app/hooks/useEventListener"; import { redoLayoutChange, undoLayoutChange } from "@foxglove-studio/app/actions/layoutHistory"; import { ScreenshotsContext } from "@foxglove-studio/app/components/Screenshots/ScreenshotsProvider"; +import useEventListener from "@foxglove-studio/app/hooks/useEventListener"; import { downloadFiles } from "@foxglove-studio/app/util"; const inNativeUndoRedoElement = (eventTarget: EventTarget) => { diff --git a/app/components/GlobalVariableSlider.tsx b/app/components/GlobalVariableSlider.tsx index 729c388e254..29614a46585 100644 --- a/app/components/GlobalVariableSlider.tsx +++ b/app/components/GlobalVariableSlider.tsx @@ -13,7 +13,6 @@ import React, { ReactElement, useCallback } from "react"; import { SliderWithTicks, SliderProps } from "@foxglove-studio/app/components/SliderWithTicks"; - import useGlobalVariables from "@foxglove-studio/app/hooks/useGlobalVariables"; type Props = { diff --git a/app/components/GlobalVariablesMenu.tsx b/app/components/GlobalVariablesMenu.tsx index 1ff214420f4..c6202041472 100644 --- a/app/components/GlobalVariablesMenu.tsx +++ b/app/components/GlobalVariablesMenu.tsx @@ -15,7 +15,6 @@ import React, { useState, useCallback, useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; import styled, { css } from "styled-components"; -import { SLinkUnderline } from "@foxglove-studio/app/shared/styledComponents"; import { AddPanelPayload, addPanel } from "@foxglove-studio/app/actions/panels"; import ChildToggle from "@foxglove-studio/app/components/ChildToggle"; import Flex from "@foxglove-studio/app/components/Flex"; @@ -30,6 +29,7 @@ import HelpButton from "@foxglove-studio/app/components/PanelToolbar/HelpButton" import useGlobalVariables from "@foxglove-studio/app/hooks/useGlobalVariables"; import GlobalVariables from "@foxglove-studio/app/panels/GlobalVariables"; import helpContent from "@foxglove-studio/app/panels/GlobalVariables/index.help.md"; +import { SLinkUnderline } from "@foxglove-studio/app/shared/styledComponents"; import inScreenshotTests from "@foxglove-studio/app/stories/inScreenshotTests"; import logEvent, { getEventTags, getEventNames } from "@foxglove-studio/app/util/logEvent"; import { colors } from "@foxglove-studio/app/util/sharedStyleConstants"; diff --git a/app/components/GlobalVariablesTable.tsx b/app/components/GlobalVariablesTable.tsx index 625335cc4cd..456fa611ba3 100644 --- a/app/components/GlobalVariablesTable.tsx +++ b/app/components/GlobalVariablesTable.tsx @@ -20,10 +20,10 @@ import { usePreviousValue } from "../util/hooks"; import ChildToggle from "@foxglove-studio/app/components/ChildToggle"; import Flex from "@foxglove-studio/app/components/Flex"; import Icon from "@foxglove-studio/app/components/Icon"; -import { JSONInput } from "@foxglove-studio/app/components/input/JSONInput"; -import { ValidatedResizingInput } from "@foxglove-studio/app/components/input/ValidatedResizingInput"; import Menu, { Item } from "@foxglove-studio/app/components/Menu"; import Tooltip from "@foxglove-studio/app/components/Tooltip"; +import { JSONInput } from "@foxglove-studio/app/components/input/JSONInput"; +import { ValidatedResizingInput } from "@foxglove-studio/app/components/input/ValidatedResizingInput"; import useGlobalVariables, { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; import { memoizedGetLinkedGlobalVariablesKeyByName } from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/interactionUtils"; import useLinkedGlobalVariables from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/useLinkedGlobalVariables"; diff --git a/app/components/GradientPicker.stories.tsx b/app/components/GradientPicker.stories.tsx index 3c10f002e58..5918cca2ef7 100644 --- a/app/components/GradientPicker.stories.tsx +++ b/app/components/GradientPicker.stories.tsx @@ -30,8 +30,6 @@ function Story({ initialMaxColor?: Color; }) { const containerRef = useRef(null); - const minRef = useRef(); - const maxRef = useRef(); const [minColor, setMinColor] = useState(initialMinColor ?? { r: 0, g: 0, b: 0, a: 0 }); const [maxColor, setMaxColor] = useState(initialMaxColor ?? { r: 0, g: 0, b: 0, a: 0 }); diff --git a/app/components/Icon.tsx b/app/components/Icon.tsx index 8960648ac1b..f2db63ab8df 100644 --- a/app/components/Icon.tsx +++ b/app/components/Icon.tsx @@ -11,7 +11,6 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import cx from "classnames"; import * as React from "react"; diff --git a/app/components/LayoutMenu.tsx b/app/components/LayoutMenu.tsx index 686662158bc..ba6ca394fd9 100644 --- a/app/components/LayoutMenu.tsx +++ b/app/components/LayoutMenu.tsx @@ -15,11 +15,11 @@ import React, { useState } from "react"; import LayoutIcon from "@foxglove-studio/app/assets/layout.svg"; import ChildToggle from "@foxglove-studio/app/components/ChildToggle"; +import ClearBagCacheMenuItem from "@foxglove-studio/app/components/ClearBagCacheMenuItem"; import Flex from "@foxglove-studio/app/components/Flex"; import { WrappedIcon } from "@foxglove-studio/app/components/Icon"; import { openLayoutModal } from "@foxglove-studio/app/components/LayoutModal"; import Menu, { Item } from "@foxglove-studio/app/components/Menu"; -import ClearBagCacheMenuItem from "@foxglove-studio/app/components/ClearBagCacheMenuItem"; export default function LayoutMenu() { const [isOpen, setIsOpen] = useState(false); diff --git a/app/components/LayoutModal.tsx b/app/components/LayoutModal.tsx index 7e85a24dcbd..ff7ef4d9fcb 100644 --- a/app/components/LayoutModal.tsx +++ b/app/components/LayoutModal.tsx @@ -17,8 +17,8 @@ import React, { useCallback } from "react"; import { connect } from "react-redux"; import { loadLayout } from "@foxglove-studio/app/actions/panels"; -import renderToBody from "@foxglove-studio/app/components/renderToBody"; import ShareJsonModal from "@foxglove-studio/app/components/ShareJsonModal"; +import renderToBody from "@foxglove-studio/app/components/renderToBody"; import { State } from "@foxglove-studio/app/reducers"; import { PanelsState } from "@foxglove-studio/app/reducers/panels"; diff --git a/app/components/Menu/index.stories.tsx b/app/components/Menu/index.stories.tsx index c436480b652..f395a9f08af 100644 --- a/app/components/Menu/index.stories.tsx +++ b/app/components/Menu/index.stories.tsx @@ -12,7 +12,6 @@ // You may not use this file except in compliance with the License. import { storiesOf } from "@storybook/react"; -import React, { ReactInstance } from "react"; import ReactDOM from "react-dom"; import Menu, { Item, SubMenu } from "@foxglove-studio/app/components/Menu"; diff --git a/app/components/MessageHistoryDEPRECATED/index.ts b/app/components/MessageHistoryDEPRECATED/index.ts index e698acdcfa2..ba107791ee5 100644 --- a/app/components/MessageHistoryDEPRECATED/index.ts +++ b/app/components/MessageHistoryDEPRECATED/index.ts @@ -14,12 +14,12 @@ import React, { ReactElement, useMemo } from "react"; import { Time } from "rosbag"; +import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import { getTopicsFromPaths } from "@foxglove-studio/app/components/MessagePathSyntax/parseRosPath"; import { MessagePathDataItem, useDecodeMessagePathsForMessagesByTopic, } from "@foxglove-studio/app/components/MessagePathSyntax/useCachedGetMessagePathDataItems"; -import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import { Message } from "@foxglove-studio/app/players/types"; import { useShallowMemo } from "@foxglove-studio/app/util/hooks"; diff --git a/app/components/MessageOrderControls.tsx b/app/components/MessageOrderControls.tsx index 05fb01fd027..d45a5ff1076 100644 --- a/app/components/MessageOrderControls.tsx +++ b/app/components/MessageOrderControls.tsx @@ -16,8 +16,8 @@ import { useSelector, useDispatch } from "react-redux"; import { setPlaybackConfig } from "@foxglove-studio/app/actions/panels"; import Dropdown from "@foxglove-studio/app/components/Dropdown"; import NoHeaderTopicsButton from "@foxglove-studio/app/components/NoHeaderTopicsButton"; -import { defaultPlaybackConfig } from "@foxglove-studio/app/reducers/panels"; import { State } from "@foxglove-studio/app/reducers"; +import { defaultPlaybackConfig } from "@foxglove-studio/app/reducers/panels"; const messageOrderLabel = { receiveTime: "Receive time", diff --git a/app/components/MessagePathSyntax/MessagePathInput.test.ts b/app/components/MessagePathSyntax/MessagePathInput.test.ts index f9c06efc198..5c88e048d8a 100644 --- a/app/components/MessagePathSyntax/MessagePathInput.test.ts +++ b/app/components/MessagePathSyntax/MessagePathInput.test.ts @@ -11,8 +11,8 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { RosPath } from "./constants"; import { tryToSetDefaultGlobalVar, getFirstInvalidVariableFromRosPath } from "./MessagePathInput"; +import { RosPath } from "./constants"; import { getGlobalHooks } from "@foxglove-studio/app/loadWebviz"; const defaultGlobalVars = getGlobalHooks().getDefaultPersistedState().panels.globalVariables; diff --git a/app/components/MessagePathSyntax/MessagePathInput.tsx b/app/components/MessagePathSyntax/MessagePathInput.tsx index 768dc76b4fc..ae3329e8df2 100644 --- a/app/components/MessagePathSyntax/MessagePathInput.tsx +++ b/app/components/MessagePathSyntax/MessagePathInput.tsx @@ -16,8 +16,8 @@ import cx from "classnames"; import { flatten, flatMap, partition } from "lodash"; import * as React from "react"; -import { RosPath, RosPrimitive } from "./constants"; import styles from "./MessagePathInput.module.scss"; +import { RosPath, RosPrimitive } from "./constants"; import { StructureTraversalResult, traverseStructure, @@ -26,13 +26,13 @@ import { validTerminatingStructureItem, } from "./messagePathsForDatatype"; import parseRosPath from "./parseRosPath"; +import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import Autocomplete from "@foxglove-studio/app/components/Autocomplete"; import Dropdown from "@foxglove-studio/app/components/Dropdown"; import Icon from "@foxglove-studio/app/components/Icon"; import Tooltip from "@foxglove-studio/app/components/Tooltip"; import useGlobalVariables, { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; import { getGlobalHooks } from "@foxglove-studio/app/loadWebviz"; -import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import { Topic } from "@foxglove-studio/app/players/types"; import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; import { getTopicNames, getTopicsByTopicName } from "@foxglove-studio/app/util/selectors"; diff --git a/app/components/MessagePathSyntax/constants.ts b/app/components/MessagePathSyntax/constants.ts index efe26c86a3a..ba854dbc7b8 100644 --- a/app/components/MessagePathSyntax/constants.ts +++ b/app/components/MessagePathSyntax/constants.ts @@ -11,8 +11,6 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Keys } from "utility-types"; - const RosPrimitives = { bool: null, int8: null, diff --git a/app/components/MessagePathSyntax/useCachedGetMessagePathDataItems.ts b/app/components/MessagePathSyntax/useCachedGetMessagePathDataItems.ts index f340ee513f5..78fb1a4c121 100644 --- a/app/components/MessagePathSyntax/useCachedGetMessagePathDataItems.ts +++ b/app/components/MessagePathSyntax/useCachedGetMessagePathDataItems.ts @@ -14,16 +14,12 @@ import { isEqual } from "lodash"; import { useCallback, useMemo, useRef } from "react"; -import { MessagePathFilter } from "./constants"; +import { MessagePathFilter, MessagePathStructureItem, RosPath } from "./constants"; import { messagePathStructures } from "./messagePathsForDatatype"; -import { - MessagePathStructureItem, - RosPath, -} from "@foxglove-studio/app/components/MessagePathSyntax/constants"; +import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import { isTypicalFilterName } from "@foxglove-studio/app/components/MessagePathSyntax/isTypicalFilterName"; import parseRosPath from "@foxglove-studio/app/components/MessagePathSyntax/parseRosPath"; import useGlobalVariables, { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; -import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import { ReflectiveMessage, Topic } from "@foxglove-studio/app/players/types"; import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; import { fieldNames, getField, getIndex } from "@foxglove-studio/app/util/binaryObjects"; diff --git a/app/components/MessagePathSyntax/useLatestMessageDataItem.ts b/app/components/MessagePathSyntax/useLatestMessageDataItem.ts index 4b9f260f4fa..832c29562ef 100644 --- a/app/components/MessagePathSyntax/useLatestMessageDataItem.ts +++ b/app/components/MessagePathSyntax/useLatestMessageDataItem.ts @@ -18,8 +18,8 @@ import { useCachedGetMessagePathDataItems, MessagePathDataItem, } from "./useCachedGetMessagePathDataItems"; -import { useMessagePipeline } from "@foxglove-studio/app/components/MessagePipeline"; import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; +import { useMessagePipeline } from "@foxglove-studio/app/components/MessagePipeline"; import { Message, MessageFormat } from "@foxglove-studio/app/players/types"; import { useChangeDetector } from "@foxglove-studio/app/util/hooks"; diff --git a/app/components/MessagePipeline/FakePlayer.ts b/app/components/MessagePipeline/FakePlayer.ts index 75449452e73..f604ba27fce 100644 --- a/app/components/MessagePipeline/FakePlayer.ts +++ b/app/components/MessagePipeline/FakePlayer.ts @@ -12,6 +12,7 @@ // You may not use this file except in compliance with the License. import { $Values } from "utility-types"; + import { PlayerCapabilities, PlayerStateActiveData, diff --git a/app/components/MessagePipeline/index.test.tsx b/app/components/MessagePipeline/index.test.tsx index 9a5bfd69b6b..7e933e09fa4 100644 --- a/app/components/MessagePipeline/index.test.tsx +++ b/app/components/MessagePipeline/index.test.tsx @@ -23,11 +23,11 @@ import { } from "."; import FakePlayer from "./FakePlayer"; import { MAX_PROMISE_TIMEOUT_TIME_MS } from "./pauseFrameForPromise"; +import { PlayerStateActiveData } from "@foxglove-studio/app/players/types"; import delay from "@foxglove-studio/app/shared/delay"; import signal from "@foxglove-studio/app/shared/signal"; import tick from "@foxglove-studio/app/shared/tick"; import { initializeLogEvent, resetLogEventForTests } from "@foxglove-studio/app/util/logEvent"; -import { PlayerStateActiveData } from "@foxglove-studio/app/players/types"; jest.setTimeout(MAX_PROMISE_TIMEOUT_TIME_MS * 3); diff --git a/app/components/MessagePipeline/index.tsx b/app/components/MessagePipeline/index.tsx index cb2b7b7bf80..1a7e33b2566 100644 --- a/app/components/MessagePipeline/index.tsx +++ b/app/components/MessagePipeline/index.tsx @@ -11,14 +11,14 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import { debounce, flatten, groupBy, isEqual } from "lodash"; import * as React from "react"; +import { ReactElement } from "react"; import { Time, TimeUtil } from "rosbag"; +import { $Shape } from "utility-types"; import { pauseFrameForPromises, FramePromise } from "./pauseFrameForPromise"; import warnOnOutOfSyncMessages from "./warnOnOutOfSyncMessages"; -import signal from "@foxglove-studio/app/shared/signal"; import { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; import { AdvertisePayload, @@ -32,6 +32,7 @@ import { SubscribePayload, Topic, } from "@foxglove-studio/app/players/types"; +import signal from "@foxglove-studio/app/shared/signal"; import StoreSetup from "@foxglove-studio/app/stories/StoreSetup"; import { wrapMessages } from "@foxglove-studio/app/test/datatypes"; import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; @@ -45,7 +46,6 @@ import { } from "@foxglove-studio/app/util/hooks"; import naturalSort from "@foxglove-studio/app/util/naturalSort"; import sendNotification from "@foxglove-studio/app/util/sendNotification"; -import { ReactElement, ReactNode } from "react"; export const WARN_ON_SUBSCRIPTIONS_WITHIN_TIME_MS = 1000; diff --git a/app/components/NoHeaderTopicsButton.tsx b/app/components/NoHeaderTopicsButton.tsx index 9e08eda8e42..0e205bedd9a 100644 --- a/app/components/NoHeaderTopicsButton.tsx +++ b/app/components/NoHeaderTopicsButton.tsx @@ -18,8 +18,8 @@ import styled from "styled-components"; import Icon from "@foxglove-studio/app/components/Icon"; import { useMessagePipeline } from "@foxglove-studio/app/components/MessagePipeline"; import Modal, { Title } from "@foxglove-studio/app/components/Modal"; -import renderToBody from "@foxglove-studio/app/components/renderToBody"; import TextContent from "@foxglove-studio/app/components/TextContent"; +import renderToBody from "@foxglove-studio/app/components/renderToBody"; const SRoot = styled.div` max-width: calc(100vw - 30px); diff --git a/app/components/Panel.test.tsx b/app/components/Panel.test.tsx index ec253cd6296..8a7ea025610 100644 --- a/app/components/Panel.test.tsx +++ b/app/components/Panel.test.tsx @@ -11,10 +11,10 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import { mount } from "enzyme"; import { createMemoryHistory } from "history"; import * as React from "react"; +import { $Shape } from "utility-types"; import { savePanelConfigs } from "@foxglove-studio/app/actions/panels"; import Panel from "@foxglove-studio/app/components/Panel"; diff --git a/app/components/Panel.tsx b/app/components/Panel.tsx index 030b0ad9048..32f7a3c0642 100644 --- a/app/components/Panel.tsx +++ b/app/components/Panel.tsx @@ -11,7 +11,6 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import BorderAllIcon from "@mdi/svg/svg/border-all.svg"; import CloseIcon from "@mdi/svg/svg/close.svg"; import ExpandAllOutlineIcon from "@mdi/svg/svg/expand-all-outline.svg"; @@ -35,8 +34,10 @@ import { } from "react-mosaic-component"; import { useSelector, useDispatch } from "react-redux"; import { bindActionCreators } from "redux"; +import { $Shape } from "utility-types"; import styles from "./Panel.module.scss"; +import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import { addSelectedPanelId, removeSelectedPanelId, @@ -57,9 +58,9 @@ import Icon from "@foxglove-studio/app/components/Icon"; import KeyListener from "@foxglove-studio/app/components/KeyListener"; import PanelContext from "@foxglove-studio/app/components/PanelContext"; import MosaicDragHandle from "@foxglove-studio/app/components/PanelToolbar/MosaicDragHandle"; -import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import PanelList, { getPanelsByType } from "@foxglove-studio/app/panels/PanelList"; import { Topic } from "@foxglove-studio/app/players/types"; +import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; import { TabPanelConfig } from "@foxglove-studio/app/types/layouts"; import { CreateTabPanelPayload, @@ -69,7 +70,6 @@ import { PanelConfig, SaveConfig, } from "@foxglove-studio/app/types/panels"; -import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; import { TAB_PANEL_TYPE } from "@foxglove-studio/app/util/globalConstants"; import { getAllPanelIds, diff --git a/app/components/PanelToolbar/MosaicDragHandle.tsx b/app/components/PanelToolbar/MosaicDragHandle.tsx index ca642b7eea2..d4cb5eaf720 100644 --- a/app/components/PanelToolbar/MosaicDragHandle.tsx +++ b/app/components/PanelToolbar/MosaicDragHandle.tsx @@ -13,7 +13,7 @@ import _ from "lodash"; import React, { useContext, ReactNode } from "react"; -import { DragObjectWithType, useDrag } from "react-dnd"; +import { useDrag } from "react-dnd"; import { MosaicDragType, MosaicWindowContext } from "react-mosaic-component"; import { useSelector, useDispatch } from "react-redux"; import { bindActionCreators } from "redux"; diff --git a/app/components/PanelToolbar/index.tsx b/app/components/PanelToolbar/index.tsx index 1514c809c73..50012d32817 100644 --- a/app/components/PanelToolbar/index.tsx +++ b/app/components/PanelToolbar/index.tsx @@ -23,13 +23,12 @@ import cx from "classnames"; import * as React from "react"; // eslint-disable-line import/no-duplicates import { useContext, useState, useCallback, useMemo } from "react"; // eslint-disable-line import/no-duplicates import { MosaicContext, MosaicWindowContext } from "react-mosaic-component"; - import { useDispatch, useSelector, ReactReduxContext } from "react-redux"; import { bindActionCreators } from "redux"; import HelpButton from "./HelpButton"; -import styles from "./index.module.scss"; import MosaicDragHandle from "./MosaicDragHandle"; +import styles from "./index.module.scss"; import { savePanelConfigs, changePanelLayout, @@ -44,13 +43,13 @@ import Icon from "@foxglove-studio/app/components/Icon"; import { Item, SubMenu } from "@foxglove-studio/app/components/Menu"; import PanelContext from "@foxglove-studio/app/components/PanelContext"; import { getPanelTypeFromMosaic } from "@foxglove-studio/app/components/PanelToolbar/utils"; -import renderToBody from "@foxglove-studio/app/components/renderToBody"; import ShareJsonModal from "@foxglove-studio/app/components/ShareJsonModal"; +import renderToBody from "@foxglove-studio/app/components/renderToBody"; import PanelList, { PanelSelection } from "@foxglove-studio/app/panels/PanelList"; +import { State } from "@foxglove-studio/app/reducers"; import frameless from "@foxglove-studio/app/util/frameless"; import { TAB_PANEL_TYPE } from "@foxglove-studio/app/util/globalConstants"; import logEvent, { getEventNames, getEventTags } from "@foxglove-studio/app/util/logEvent"; -import { State } from "@foxglove-studio/app/reducers"; type Props = { children?: React.ReactNode; diff --git a/app/components/PlaybackControls/PlaybackBarHoverTicks.tsx b/app/components/PlaybackControls/PlaybackBarHoverTicks.tsx index 1dc36869faa..dd63137f9a0 100644 --- a/app/components/PlaybackControls/PlaybackBarHoverTicks.tsx +++ b/app/components/PlaybackControls/PlaybackBarHoverTicks.tsx @@ -13,6 +13,7 @@ import React, { useMemo, useState } from "react"; import styled, { css } from "styled-components"; +import { ScaleBounds } from "../ReactChartjs/zoomAndPanHelpers"; import Dimensions from "@foxglove-studio/app/components/Dimensions"; import { MessagePipelineContext, @@ -20,7 +21,6 @@ import { } from "@foxglove-studio/app/components/MessagePipeline"; import HoverBar from "@foxglove-studio/app/components/TimeBasedChart/HoverBar"; import { toSec } from "@foxglove-studio/app/util/time"; -import { ScaleBounds } from "../ReactChartjs/zoomAndPanHelpers"; const sharedTickStyles = css` position: absolute; diff --git a/app/components/PlaybackControls/index.tsx b/app/components/PlaybackControls/index.tsx index 62bbf86abae..fd4e9079112 100644 --- a/app/components/PlaybackControls/index.tsx +++ b/app/components/PlaybackControls/index.tsx @@ -22,10 +22,9 @@ import { Time } from "rosbag"; import styled from "styled-components"; import uuid from "uuid"; -import styles from "./index.module.scss"; import PlaybackBarHoverTicks from "./PlaybackBarHoverTicks"; import { ProgressPlot } from "./ProgressPlot"; -import Tooltip from "@foxglove-studio/app/components/TooltipBase"; +import styles from "./index.module.scss"; import { clearHoverValue, setHoverValue } from "@foxglove-studio/app/actions/hoverValue"; import Button from "@foxglove-studio/app/components/Button"; import Flex from "@foxglove-studio/app/components/Flex"; @@ -45,6 +44,7 @@ import { import PlaybackSpeedControls from "@foxglove-studio/app/components/PlaybackSpeedControls"; import Slider from "@foxglove-studio/app/components/Slider"; import tooltipStyles from "@foxglove-studio/app/components/Tooltip.module.scss"; +import Tooltip from "@foxglove-studio/app/components/TooltipBase"; import { PlayerState, PlayerStateActiveData } from "@foxglove-studio/app/players/types"; import colors from "@foxglove-studio/app/styles/colors.module.scss"; import { formatTime } from "@foxglove-studio/app/util/formatTime"; diff --git a/app/components/PlaybackControls/sharedHelpers.ts b/app/components/PlaybackControls/sharedHelpers.ts index c6248fc18ee..d2a43c3e410 100644 --- a/app/components/PlaybackControls/sharedHelpers.ts +++ b/app/components/PlaybackControls/sharedHelpers.ts @@ -11,8 +11,8 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Values } from "utility-types"; import { Time } from "rosbag"; +import { $Values } from "utility-types"; import { PlayerState } from "@foxglove-studio/app/players/types"; import { toMillis, fromMillis } from "@foxglove-studio/app/util/time"; diff --git a/app/components/PlaybackSpeedControls.tsx b/app/components/PlaybackSpeedControls.tsx index 005039ea199..044848a1332 100644 --- a/app/components/PlaybackSpeedControls.tsx +++ b/app/components/PlaybackSpeedControls.tsx @@ -13,10 +13,10 @@ import React, { useCallback, useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; +import { useDataSourceInfo } from "@foxglove-studio/app/PanelAPI"; import { setPlaybackConfig } from "@foxglove-studio/app/actions/panels"; import Dropdown from "@foxglove-studio/app/components/Dropdown"; import { useMessagePipeline } from "@foxglove-studio/app/components/MessagePipeline"; -import { useDataSourceInfo } from "@foxglove-studio/app/PanelAPI"; import { PlayerCapabilities } from "@foxglove-studio/app/players/types"; import { ndash } from "@foxglove-studio/app/util/entities"; diff --git a/app/components/PlayerManager.tsx b/app/components/PlayerManager.tsx index 2d268655488..491c3b911fc 100644 --- a/app/components/PlayerManager.tsx +++ b/app/components/PlayerManager.tsx @@ -29,6 +29,7 @@ import { import DocumentDropListener from "@foxglove-studio/app/components/DocumentDropListener"; import DropOverlay from "@foxglove-studio/app/components/DropOverlay"; import { getExperimentalFeature } from "@foxglove-studio/app/components/ExperimentalFeatures"; +import { useFileContext } from "@foxglove-studio/app/components/FileContext"; import { MessagePipelineProvider } from "@foxglove-studio/app/components/MessagePipeline"; import { CoreDataProviders } from "@foxglove-studio/app/dataProviders/constants"; import { getRemoteBagGuid } from "@foxglove-studio/app/dataProviders/getRemoteBagGuid"; @@ -40,15 +41,14 @@ import { import { DataProviderDescriptor } from "@foxglove-studio/app/dataProviders/types"; import { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; import useUserNodes from "@foxglove-studio/app/hooks/useUserNodes"; -import AutomatedRunPlayer from "@foxglove-studio/app/players/automatedRun/AutomatedRunPlayer"; -import PerformanceMeasuringClient from "@foxglove-studio/app/players/automatedRun/performanceMeasuringClient"; -import videoRecordingClient from "@foxglove-studio/app/players/automatedRun/videoRecordingClient"; import OrderedStampPlayer from "@foxglove-studio/app/players/OrderedStampPlayer"; import RandomAccessPlayer from "@foxglove-studio/app/players/RandomAccessPlayer"; import RosbridgePlayer from "@foxglove-studio/app/players/RosbridgePlayer"; -import { useFileContext } from "@foxglove-studio/app/components/FileContext"; -import { NotifyPlayerManagerReplyData, Player } from "@foxglove-studio/app/players/types"; import UserNodePlayer from "@foxglove-studio/app/players/UserNodePlayer"; +import AutomatedRunPlayer from "@foxglove-studio/app/players/automatedRun/AutomatedRunPlayer"; +import PerformanceMeasuringClient from "@foxglove-studio/app/players/automatedRun/performanceMeasuringClient"; +import videoRecordingClient from "@foxglove-studio/app/players/automatedRun/videoRecordingClient"; +import { NotifyPlayerManagerReplyData, Player } from "@foxglove-studio/app/players/types"; import { UserNodes } from "@foxglove-studio/app/types/panels"; import { corsError } from "@foxglove-studio/app/util/corsError"; import demoLayoutJson from "@foxglove-studio/app/util/demoLayout.json"; diff --git a/app/components/Radio.tsx b/app/components/Radio.tsx index aa6f64d27b3..c249f9eed21 100644 --- a/app/components/Radio.tsx +++ b/app/components/Radio.tsx @@ -12,8 +12,8 @@ // You may not use this file except in compliance with the License. import RadioButtonUncheckedIcon from "@mdi/svg/svg/radiobox-blank.svg"; import RadioButtonCheckedIcon from "@mdi/svg/svg/radiobox-marked.svg"; -import styled from "styled-components"; import { ReactElement } from "react"; +import styled from "styled-components"; import Icon from "./Icon"; import { colorToAlpha } from "./SegmentedControl"; diff --git a/app/components/ReactChartjs/ChartJSManager.ts b/app/components/ReactChartjs/ChartJSManager.ts index 961de0bb1e9..be71e13e741 100644 --- a/app/components/ReactChartjs/ChartJSManager.ts +++ b/app/components/ReactChartjs/ChartJSManager.ts @@ -281,11 +281,10 @@ export default class ChartJSManager { const nearestElements = chartInstance.getElementsAtEventForMode(event, "nearest", { intersect: false, }); - const nearestXAxisElement = nearestElements.find(( - item: any, // eslint-disable-next-line no-underscore-dangle - ) => + const nearestXAxisElement = nearestElements.find((item: any) => xAxisElements.some( (item2: any) => + // eslint-disable-next-line no-underscore-dangle item._index === item2._index && item._datasetIndex === item2._datasetIndex, ), ); diff --git a/app/components/ReactChartjs/ChartJSWorker.ts b/app/components/ReactChartjs/ChartJSWorker.ts index d26fe712630..46725e48ce1 100644 --- a/app/components/ReactChartjs/ChartJSWorker.ts +++ b/app/components/ReactChartjs/ChartJSWorker.ts @@ -15,9 +15,9 @@ import Chart from "chart.js"; import ChartJSManager from "./ChartJSManager"; import { RpcLike } from "@foxglove-studio/app/util/FakeRpc"; -import installChartjs from "@foxglove-studio/app/util/installChartjs"; import Rpc from "@foxglove-studio/app/util/Rpc"; import { setupWorker } from "@foxglove-studio/app/util/RpcWorkerUtils"; +import installChartjs from "@foxglove-studio/app/util/installChartjs"; import { inWebWorker } from "@foxglove-studio/app/util/workers"; let hasInstalledChartjs = false; diff --git a/app/components/ReactChartjs/index.tsx b/app/components/ReactChartjs/index.tsx index 9aee96eb926..dff6ff25657 100644 --- a/app/components/ReactChartjs/index.tsx +++ b/app/components/ReactChartjs/index.tsx @@ -27,12 +27,13 @@ import uuid from "uuid"; import { ScaleOptions as ManagerScaleOptions } from "./ChartJSManager"; // eslint-disable-next-line import/no-unresolved -import ChartJSWorker from "worker-loader!./ChartJSWorker.worker.ts"; import { ScaleBounds, ZoomOptions, PanOptions, wheelZoomHandler } from "./zoomAndPanHelpers"; import { objectValues } from "@foxglove-studio/app/util"; import { getFakeRpcs, RpcLike } from "@foxglove-studio/app/util/FakeRpc"; -import supportsOffscreenCanvas from "@foxglove-studio/app/util/supportsOffscreenCanvas"; import WebWorkerManager from "@foxglove-studio/app/util/WebWorkerManager"; +import supportsOffscreenCanvas from "@foxglove-studio/app/util/supportsOffscreenCanvas"; +// eslint-disable-next-line import/default +import ChartJSWorker from "worker-loader!./ChartJSWorker.worker.ts"; const getMainThreadChartJSWorker = () => import( diff --git a/app/components/Root.tsx b/app/components/Root.tsx index 7a66e192706..477781a0fdf 100644 --- a/app/components/Root.tsx +++ b/app/components/Root.tsx @@ -13,8 +13,8 @@ import cx from "classnames"; import { ConnectedRouter } from "connected-react-router"; import { useEffect, useRef } from "react"; -import { hot } from "react-hot-loader/root"; import { setConfig } from "react-hot-loader"; +import { hot } from "react-hot-loader/root"; import { connect, Provider } from "react-redux"; import { Route } from "react-router"; @@ -34,11 +34,11 @@ import ShortcutsModal from "@foxglove-studio/app/components/ShortcutsModal"; import { TinyConnectionPicker } from "@foxglove-studio/app/components/TinyConnectionPicker"; import Toolbar from "@foxglove-studio/app/components/Toolbar"; import withDragDropContext from "@foxglove-studio/app/components/withDragDropContext"; +import useDocumentTitle from "@foxglove-studio/app/hooks/useDocumentTitle"; import { State } from "@foxglove-studio/app/reducers"; import getGlobalStore from "@foxglove-studio/app/store/getGlobalStore"; import browserHistory from "@foxglove-studio/app/util/history"; import inAutomatedRunMode from "@foxglove-studio/app/util/inAutomatedRunMode"; -import useDocumentTitle from "@foxglove-studio/app/hooks/useDocumentTitle"; setConfig({ // react-hot-loader re-writes hooks with a wrapper function that is designed diff --git a/app/components/Screenshots/ScreenshotsProvider.test.tsx b/app/components/Screenshots/ScreenshotsProvider.test.tsx index 73bb8bfce47..f8de345e906 100644 --- a/app/components/Screenshots/ScreenshotsProvider.test.tsx +++ b/app/components/Screenshots/ScreenshotsProvider.test.tsx @@ -18,9 +18,9 @@ import React, { useContext } from "react"; import { act } from "react-dom/test-utils"; import { ScreenshotsProvider, ScreenshotsContext } from "./ScreenshotsProvider"; +import { MockMessagePipelineProvider } from "@foxglove-studio/app/components/MessagePipeline"; import delay from "@foxglove-studio/app/shared/delay"; import signal from "@foxglove-studio/app/shared/signal"; -import { MockMessagePipelineProvider } from "@foxglove-studio/app/components/MessagePipeline"; import sendNotification from "@foxglove-studio/app/util/sendNotification"; const defaultContext = { diff --git a/app/components/ShareJsonModal.stories.tsx b/app/components/ShareJsonModal.stories.tsx index ea861eee83f..19842ffa0d4 100644 --- a/app/components/ShareJsonModal.stories.tsx +++ b/app/components/ShareJsonModal.stories.tsx @@ -19,7 +19,7 @@ import { importPanelLayout } from "@foxglove-studio/app/actions/panels"; import ShareJsonModal from "@foxglove-studio/app/components/ShareJsonModal"; import { ImportPanelLayoutPayload } from "@foxglove-studio/app/types/panels"; -const onLayoutChange = (layout: ImportPanelLayoutPayload, isFromUrl: boolean = false) => { +const onLayoutChange = (layout: ImportPanelLayoutPayload, _isFromUrl: boolean = false) => { importPanelLayout(layout); }; diff --git a/app/components/TextField.stories.tsx b/app/components/TextField.stories.tsx index 75c20e2689d..64688e3e532 100644 --- a/app/components/TextField.stories.tsx +++ b/app/components/TextField.stories.tsx @@ -15,8 +15,8 @@ import { storiesOf } from "@storybook/react"; import * as React from "react"; import TextField from "./TextField"; -import { createPrimitiveValidator, hasLen } from "@foxglove-studio/app/shared/validators"; import Flex from "@foxglove-studio/app/components/Flex"; +import { createPrimitiveValidator, hasLen } from "@foxglove-studio/app/shared/validators"; import { triggerInputChange, triggerInputBlur } from "@foxglove-studio/app/stories/PanelSetup"; const validator = createPrimitiveValidator([hasLen(4)]); diff --git a/app/components/TimeBasedChart/TimeBasedChartTooltip.tsx b/app/components/TimeBasedChart/TimeBasedChartTooltip.tsx index 82c5919930a..ce227955010 100644 --- a/app/components/TimeBasedChart/TimeBasedChartTooltip.tsx +++ b/app/components/TimeBasedChart/TimeBasedChartTooltip.tsx @@ -13,8 +13,8 @@ import * as React from "react"; -import { TimeBasedChartTooltipData } from "./index"; import styles from "./TimeBasedChartTooltip.module.scss"; +import { TimeBasedChartTooltipData } from "./index"; import Tooltip from "@foxglove-studio/app/components/Tooltip"; import { formatTime } from "@foxglove-studio/app/util/formatTime"; import { subtractTimes, toSec, formatTimeRaw } from "@foxglove-studio/app/util/time"; diff --git a/app/components/TimeBasedChart/index.stories.tsx b/app/components/TimeBasedChart/index.stories.tsx index adf3d7032f0..d2e5b52e2f2 100644 --- a/app/components/TimeBasedChart/index.stories.tsx +++ b/app/components/TimeBasedChart/index.stories.tsx @@ -35,7 +35,7 @@ const tooltipData: any = { startTime: { sec: 1396293889, nsec: 156763 }, }; -const props: any = { +const commonProps: any = { isSynced: true, zoom: true, width: 867.272705078125, @@ -110,7 +110,7 @@ function CleansUpTooltipExample() { return (
- {!hasRenderedOnce && } + {!hasRenderedOnce && }
); @@ -118,7 +118,7 @@ function CleansUpTooltipExample() { function ZoomExample() { const [, forceUpdate] = useState(0); - const newProps = cloneDeep(props); + const newProps = cloneDeep(commonProps); const newDataPoint = cloneDeep(newProps.data.datasets[0].data[0]); newDataPoint.x = 20; newProps.data.datasets[0].data[1] = newDataPoint; @@ -228,7 +228,7 @@ storiesOf("", module) return (
- +
); @@ -250,7 +250,7 @@ storiesOf("", module) }} > - + ); @@ -270,7 +270,7 @@ storiesOf("", module) }} > - + ); diff --git a/app/components/TimeBasedChart/index.tsx b/app/components/TimeBasedChart/index.tsx index 10556eeefb4..b3dc0e1305e 100644 --- a/app/components/TimeBasedChart/index.tsx +++ b/app/components/TimeBasedChart/index.tsx @@ -23,7 +23,6 @@ import HoverBar from "./HoverBar"; import TimeBasedChartTooltip from "./TimeBasedChartTooltip"; import { clearHoverValue, setHoverValue } from "@foxglove-studio/app/actions/hoverValue"; import Button from "@foxglove-studio/app/components/Button"; -import createSyncingComponent from "@foxglove-studio/app/components/createSyncingComponent"; import KeyListener from "@foxglove-studio/app/components/KeyListener"; import { MessageHistoryItem } from "@foxglove-studio/app/components/MessageHistoryDEPRECATED"; import { MessagePathDataItem } from "@foxglove-studio/app/components/MessagePathSyntax/useCachedGetMessagePathDataItems"; @@ -39,6 +38,7 @@ import { } from "@foxglove-studio/app/components/ReactChartjs/zoomAndPanHelpers"; import TimeBasedChartLegend from "@foxglove-studio/app/components/TimeBasedChart/TimeBasedChartLegend"; import Tooltip from "@foxglove-studio/app/components/Tooltip"; +import createSyncingComponent from "@foxglove-studio/app/components/createSyncingComponent"; import mixins from "@foxglove-studio/app/styles/mixins.module.scss"; import { isBobject } from "@foxglove-studio/app/util/binaryObjects"; import { useDeepChangeDetector } from "@foxglove-studio/app/util/hooks"; diff --git a/app/components/Tooltip.tsx b/app/components/Tooltip.tsx index f9833179e43..f9f0b644a9f 100644 --- a/app/components/Tooltip.tsx +++ b/app/components/Tooltip.tsx @@ -13,8 +13,8 @@ import * as React from "react"; -import BaseTooltip from "@foxglove-studio/app/components/TooltipBase"; import styles from "./Tooltip.module.scss"; +import BaseTooltip from "@foxglove-studio/app/components/TooltipBase"; type BaseProps = React.ComponentProps; type Props = Omit & { diff --git a/app/components/TooltipBase.tsx b/app/components/TooltipBase.tsx index 9c53b105888..d7c39875284 100644 --- a/app/components/TooltipBase.tsx +++ b/app/components/TooltipBase.tsx @@ -85,7 +85,7 @@ export default class Tooltip extends React.Component { // show the tooltip at absolute position with given contents static show(x: number, y: number, contents: Contents, props?: Omit) { // extract defaultShown and defaultMousePosition from props since we specify those explicitly - const { defaultShown, defaultMousePosition, ...rest } = props ?? {}; + const { defaultShown: _, defaultMousePosition: __, ...rest } = props ?? {}; const container = getPortal(); // satisfy flow if (!container) { @@ -142,7 +142,7 @@ export default class Tooltip extends React.Component { } }; - onMouseLeave = (e: React.MouseEvent): void => { + onMouseLeave = (_e: React.MouseEvent): void => { if (this.timeout) { clearTimeout(this.timeout); } @@ -171,7 +171,7 @@ export default class Tooltip extends React.Component { }} {...referenceProps} > - {({ ref, style, scheduleUpdate, placement, arrowProps }) => { + {({ ref, style, scheduleUpdate, placement: renderedPlacement, arrowProps }) => { const { body } = document; if (!body) { return null; @@ -182,7 +182,7 @@ export default class Tooltip extends React.Component {
{arrow && React.cloneElement(arrow, { diff --git a/app/components/Tree/TreeNode.tsx b/app/components/Tree/TreeNode.tsx index 739d07b94dd..eadcfd4e245 100644 --- a/app/components/Tree/TreeNode.tsx +++ b/app/components/Tree/TreeNode.tsx @@ -25,8 +25,8 @@ import LeadPencilIcon from "@mdi/svg/svg/lead-pencil.svg"; import cx from "classnames"; import React, { Component } from "react"; -import styles from "./index.module.scss"; import { Node } from "./Node"; +import styles from "./index.module.scss"; import Icon from "@foxglove-studio/app/components/Icon"; import Tooltip from "@foxglove-studio/app/components/Tooltip"; import colors from "@foxglove-studio/app/styles/colors.module.scss"; diff --git a/app/components/ValidatedInput.stories.tsx b/app/components/ValidatedInput.stories.tsx index d7a2b98f4b4..cc78c5dcc06 100644 --- a/app/components/ValidatedInput.stories.tsx +++ b/app/components/ValidatedInput.stories.tsx @@ -16,12 +16,12 @@ import * as React from "react"; import { DEFAULT_CAMERA_STATE } from "regl-worldview"; import ValidatedInput, { EDIT_FORMAT, EditFormat } from "./ValidatedInput"; +import Flex from "@foxglove-studio/app/components/Flex"; import { createValidator, isNumber, ValidationResult, } from "@foxglove-studio/app/shared/validators"; -import Flex from "@foxglove-studio/app/components/Flex"; import { triggerInputChange, triggerInputBlur } from "@foxglove-studio/app/stories/PanelSetup"; const INPUT_OBJ = { id: 1, name: "foo" }; diff --git a/app/components/ValidatedInput.tsx b/app/components/ValidatedInput.tsx index ba15df123e8..4bc3b39b2ee 100644 --- a/app/components/ValidatedInput.tsx +++ b/app/components/ValidatedInput.tsx @@ -11,14 +11,14 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Values } from "utility-types"; import { isEqual } from "lodash"; import * as React from "react"; import styled from "styled-components"; +import { $Values } from "utility-types"; -import { validationErrorToString, ValidationResult } from "@foxglove-studio/app/shared/validators"; import Dropdown from "@foxglove-studio/app/components/Dropdown"; import Flex from "@foxglove-studio/app/components/Flex"; +import { validationErrorToString, ValidationResult } from "@foxglove-studio/app/shared/validators"; import colors from "@foxglove-studio/app/styles/colors.module.scss"; import YAML from "@foxglove-studio/app/util/yaml"; diff --git a/app/components/createSyncingComponent.test.tsx b/app/components/createSyncingComponent.test.tsx index e1e86dda8c6..7f8c10740d9 100644 --- a/app/components/createSyncingComponent.test.tsx +++ b/app/components/createSyncingComponent.test.tsx @@ -14,9 +14,9 @@ import { mount } from "enzyme"; import React from "react"; +import createSyncingComponent from "@foxglove-studio/app/components/createSyncingComponent"; import delay from "@foxglove-studio/app/shared/delay"; import tick from "@foxglove-studio/app/shared/tick"; -import createSyncingComponent from "@foxglove-studio/app/components/createSyncingComponent"; describe("createSyncingComponent", () => { const IdentitySyncingComponent = createSyncingComponent( diff --git a/app/dataProviders/ApiCheckerDataProvider.ts b/app/dataProviders/ApiCheckerDataProvider.ts index 2f4d57a914d..e1568352e69 100644 --- a/app/dataProviders/ApiCheckerDataProvider.ts +++ b/app/dataProviders/ApiCheckerDataProvider.ts @@ -23,7 +23,6 @@ import { GetMessagesTopics, InitializationResult, } from "@foxglove-studio/app/dataProviders/types"; -import { Message } from "@foxglove-studio/app/players/types"; import sendNotification from "@foxglove-studio/app/util/sendNotification"; import { formatTimeRaw } from "@foxglove-studio/app/util/time"; diff --git a/app/dataProviders/BagDataProvider.test.ts b/app/dataProviders/BagDataProvider.test.ts index bea9a624bb9..20d5c43dd6c 100644 --- a/app/dataProviders/BagDataProvider.test.ts +++ b/app/dataProviders/BagDataProvider.test.ts @@ -13,13 +13,13 @@ import { TimeUtil } from "rosbag"; -import delay from "@foxglove-studio/app/shared/delay"; import BagDataProvider, { statsAreAdjacent, TimedDataThroughput, } from "@foxglove-studio/app/dataProviders/BagDataProvider"; -import sendNotification from "@foxglove-studio/app/util/sendNotification"; import { NotifyPlayerManagerReplyData } from "@foxglove-studio/app/players/types"; +import delay from "@foxglove-studio/app/shared/delay"; +import sendNotification from "@foxglove-studio/app/util/sendNotification"; const dummyExtensionPoint = { progressCallback() { diff --git a/app/dataProviders/BagDataProvider.ts b/app/dataProviders/BagDataProvider.ts index 3a3ddb0abf0..72de05d23b9 100644 --- a/app/dataProviders/BagDataProvider.ts +++ b/app/dataProviders/BagDataProvider.ts @@ -29,10 +29,10 @@ import { } from "@foxglove-studio/app/dataProviders/types"; import { getReportMetadataForChunk } from "@foxglove-studio/app/dataProviders/util"; import { Message } from "@foxglove-studio/app/players/types"; -import { bagConnectionsToTopics } from "@foxglove-studio/app/util/bagConnectionsHelper"; -import { getBagChunksOverlapCount } from "@foxglove-studio/app/util/bags"; import CachedFilelike, { FileReader } from "@foxglove-studio/app/util/CachedFilelike"; import Logger from "@foxglove-studio/app/util/Logger"; +import { bagConnectionsToTopics } from "@foxglove-studio/app/util/bagConnectionsHelper"; +import { getBagChunksOverlapCount } from "@foxglove-studio/app/util/bags"; import sendNotification from "@foxglove-studio/app/util/sendNotification"; import { fromMillis, subtractTimes } from "@foxglove-studio/app/util/time"; @@ -278,7 +278,7 @@ export default class BagDataProvider implements DataProvider { endTime: end, noParse: true, decompress: { - bz2: (buffer: Buffer, size: number) => { + bz2: (buffer: Buffer, _size: number) => { try { return Buffer.from(Bzip2.decompressFile(buffer)); } catch (error) { diff --git a/app/dataProviders/CombinedDataProvider.test.ts b/app/dataProviders/CombinedDataProvider.test.ts index 571e13742c2..7612553dcc0 100644 --- a/app/dataProviders/CombinedDataProvider.test.ts +++ b/app/dataProviders/CombinedDataProvider.test.ts @@ -26,20 +26,20 @@ import { parseMessageDefinition } from "rosbag"; -import delay from "@foxglove-studio/app/shared/delay"; import BagDataProvider from "@foxglove-studio/app/dataProviders/BagDataProvider"; import CombinedDataProvider, { mergedBlocks, } from "@foxglove-studio/app/dataProviders/CombinedDataProvider"; import MemoryDataProvider from "@foxglove-studio/app/dataProviders/MemoryDataProvider"; -import { mockExtensionPoint } from "@foxglove-studio/app/dataProviders/mockExtensionPoint"; import RenameDataProvider from "@foxglove-studio/app/dataProviders/RenameDataProvider"; +import { mockExtensionPoint } from "@foxglove-studio/app/dataProviders/mockExtensionPoint"; +import { InitializationResult } from "@foxglove-studio/app/dataProviders/types"; import { Bobject, BobjectMessage } from "@foxglove-studio/app/players/types"; +import delay from "@foxglove-studio/app/shared/delay"; import { wrapJsObject } from "@foxglove-studio/app/util/binaryObjects"; import { SECOND_SOURCE_PREFIX } from "@foxglove-studio/app/util/globalConstants"; import sendNotification from "@foxglove-studio/app/util/sendNotification"; import { fromMillis } from "@foxglove-studio/app/util/time"; -import { InitializationResult } from "@foxglove-studio/app/dataProviders/types"; // reusable providers function provider1(initiallyLoaded = false) { diff --git a/app/dataProviders/CombinedDataProvider.ts b/app/dataProviders/CombinedDataProvider.ts index 0766af6e206..ab95e29184d 100644 --- a/app/dataProviders/CombinedDataProvider.ts +++ b/app/dataProviders/CombinedDataProvider.ts @@ -32,12 +32,12 @@ import { MessageDefinitions, ParsedMessageDefinitions, } from "@foxglove-studio/app/dataProviders/types"; +import filterMap from "@foxglove-studio/app/filterMap"; import { Message, Progress, Topic } from "@foxglove-studio/app/players/types"; import { objectValues } from "@foxglove-studio/app/util"; import { deepIntersect } from "@foxglove-studio/app/util/ranges"; import sendNotification from "@foxglove-studio/app/util/sendNotification"; import { clampTime } from "@foxglove-studio/app/util/time"; -import filterMap from "@foxglove-studio/app/filterMap"; const sortTimes = (times: Time[]) => times.sort(TimeUtil.compare); const emptyGetMessagesResult = { diff --git a/app/dataProviders/IdbCacheReaderDataProvider.test.ts b/app/dataProviders/IdbCacheReaderDataProvider.test.ts index 613e3b88697..39befa16fd1 100644 --- a/app/dataProviders/IdbCacheReaderDataProvider.test.ts +++ b/app/dataProviders/IdbCacheReaderDataProvider.test.ts @@ -13,8 +13,8 @@ import IdbCacheReaderDataProvider from "./IdbCacheReaderDataProvider"; import IdbCacheWriterDataProvider from "./IdbCacheWriterDataProvider"; -import { CoreDataProviders } from "@foxglove-studio/app/dataProviders/constants"; import MemoryDataProvider from "@foxglove-studio/app/dataProviders/MemoryDataProvider"; +import { CoreDataProviders } from "@foxglove-studio/app/dataProviders/constants"; import { mockExtensionPoint } from "@foxglove-studio/app/dataProviders/mockExtensionPoint"; import { TypedMessage } from "@foxglove-studio/app/players/types"; import { getDatabasesInTests } from "@foxglove-studio/app/util/indexeddb/getDatabasesInTests"; diff --git a/app/dataProviders/IdbCacheReaderDataProvider.ts b/app/dataProviders/IdbCacheReaderDataProvider.ts index 70d3d60a410..b6f8aa3e9bd 100644 --- a/app/dataProviders/IdbCacheReaderDataProvider.ts +++ b/app/dataProviders/IdbCacheReaderDataProvider.ts @@ -19,14 +19,15 @@ import { getIdbCacheDataProviderDatabase, TIMESTAMP_INDEX, } from "./IdbCacheDataProviderDatabase"; -import { DataProvider, InitializationResult } from "./types"; import { + DataProvider, + InitializationResult, DataProviderDescriptor, ExtensionPoint, GetDataProvider, GetMessagesResult, GetMessagesTopics, -} from "@foxglove-studio/app/dataProviders/types"; +} from "./types"; import { Progress } from "@foxglove-studio/app/players/types"; import Database from "@foxglove-studio/app/util/indexeddb/Database"; import { Range, deepIntersect, isRangeCoveredByRanges } from "@foxglove-studio/app/util/ranges"; diff --git a/app/dataProviders/IdbCacheWriterDataProvider.ts b/app/dataProviders/IdbCacheWriterDataProvider.ts index 080825e81c6..abc26545409 100644 --- a/app/dataProviders/IdbCacheWriterDataProvider.ts +++ b/app/dataProviders/IdbCacheWriterDataProvider.ts @@ -33,9 +33,9 @@ import { GetMessagesTopics, InitializationResult, } from "@foxglove-studio/app/dataProviders/types"; +import Logger from "@foxglove-studio/app/util/Logger"; import { getNewConnection } from "@foxglove-studio/app/util/getNewConnection"; import Database from "@foxglove-studio/app/util/indexeddb/Database"; -import Logger from "@foxglove-studio/app/util/Logger"; import { Range, deepIntersect, diff --git a/app/dataProviders/MemoryCacheDataProvider.test.ts b/app/dataProviders/MemoryCacheDataProvider.test.ts index 21b6fffb1dd..88d1f6f4e7d 100644 --- a/app/dataProviders/MemoryCacheDataProvider.test.ts +++ b/app/dataProviders/MemoryCacheDataProvider.test.ts @@ -20,11 +20,11 @@ import MemoryCacheDataProvider, { MAX_BLOCK_SIZE_BYTES, MAX_BLOCKS, } from "./MemoryCacheDataProvider"; -import delay from "@foxglove-studio/app/shared/delay"; -import { CoreDataProviders } from "@foxglove-studio/app/dataProviders/constants"; import MemoryDataProvider from "@foxglove-studio/app/dataProviders/MemoryDataProvider"; +import { CoreDataProviders } from "@foxglove-studio/app/dataProviders/constants"; import { mockExtensionPoint } from "@foxglove-studio/app/dataProviders/mockExtensionPoint"; import { Bobject, BobjectMessage, Message } from "@foxglove-studio/app/players/types"; +import delay from "@foxglove-studio/app/shared/delay"; import { getObject } from "@foxglove-studio/app/util/binaryObjects"; import naturalSort from "@foxglove-studio/app/util/naturalSort"; import sendNotification from "@foxglove-studio/app/util/sendNotification"; diff --git a/app/dataProviders/ParseMessagesDataProvider.test.ts b/app/dataProviders/ParseMessagesDataProvider.test.ts index 56dff2261b2..77106772aab 100644 --- a/app/dataProviders/ParseMessagesDataProvider.test.ts +++ b/app/dataProviders/ParseMessagesDataProvider.test.ts @@ -12,11 +12,11 @@ // You may not use this file except in compliance with the License. import BagDataProvider from "@foxglove-studio/app/dataProviders/BagDataProvider"; -import { CoreDataProviders } from "@foxglove-studio/app/dataProviders/constants"; -import createGetDataProvider from "@foxglove-studio/app/dataProviders/createGetDataProvider"; import MemoryCacheDataProvider from "@foxglove-studio/app/dataProviders/MemoryCacheDataProvider"; import ParseMessagesDataProvider from "@foxglove-studio/app/dataProviders/ParseMessagesDataProvider"; import RewriteBinaryDataProvider from "@foxglove-studio/app/dataProviders/RewriteBinaryDataProvider"; +import { CoreDataProviders } from "@foxglove-studio/app/dataProviders/constants"; +import createGetDataProvider from "@foxglove-studio/app/dataProviders/createGetDataProvider"; import { NotifyPlayerManagerReplyData } from "@foxglove-studio/app/players/types"; function getProvider() { diff --git a/app/dataProviders/ParseMessagesDataProvider.ts b/app/dataProviders/ParseMessagesDataProvider.ts index 31fb720f2ab..85ebca7df9f 100644 --- a/app/dataProviders/ParseMessagesDataProvider.ts +++ b/app/dataProviders/ParseMessagesDataProvider.ts @@ -14,14 +14,16 @@ import { uniq } from "lodash"; import { Time, MessageReader } from "rosbag"; -import { DataProvider, InitializationResult, ExtensionPoint } from "./types"; -import ParsedMessageCache from "@foxglove-studio/app/dataProviders/ParsedMessageCache"; import { + DataProvider, + InitializationResult, + ExtensionPoint, DataProviderDescriptor, GetDataProvider, GetMessagesResult, GetMessagesTopics, -} from "@foxglove-studio/app/dataProviders/types"; +} from "./types"; +import ParsedMessageCache from "@foxglove-studio/app/dataProviders/ParsedMessageCache"; import { ParsedMessageDefinitionsByTopic } from "@foxglove-studio/app/players/types"; import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; import { FREEZE_MESSAGES } from "@foxglove-studio/app/util/globalConstants"; diff --git a/app/dataProviders/RenameDataProvider.test.ts b/app/dataProviders/RenameDataProvider.test.ts index f4f20fb9c3b..7fd658e8c40 100644 --- a/app/dataProviders/RenameDataProvider.test.ts +++ b/app/dataProviders/RenameDataProvider.test.ts @@ -25,8 +25,8 @@ // You may not use this file except in compliance with the License. import MemoryDataProvider from "@foxglove-studio/app/dataProviders/MemoryDataProvider"; -import { mockExtensionPoint } from "@foxglove-studio/app/dataProviders/mockExtensionPoint"; import RenameDataProvider from "@foxglove-studio/app/dataProviders/RenameDataProvider"; +import { mockExtensionPoint } from "@foxglove-studio/app/dataProviders/mockExtensionPoint"; import { wrapJsObject } from "@foxglove-studio/app/util/binaryObjects"; import { SECOND_SOURCE_PREFIX } from "@foxglove-studio/app/util/globalConstants"; diff --git a/app/dataProviders/RenameDataProvider.ts b/app/dataProviders/RenameDataProvider.ts index 1ab3f06ff01..2a065443275 100644 --- a/app/dataProviders/RenameDataProvider.ts +++ b/app/dataProviders/RenameDataProvider.ts @@ -14,11 +14,11 @@ import memoizeWeak from "memoize-weak"; import { Time } from "rosbag"; -import { MESSAGE_FORMATS } from "@foxglove-studio/app/dataProviders/constants"; import { BlockCache, MemoryCacheBlock, } from "@foxglove-studio/app/dataProviders/MemoryCacheDataProvider"; +import { MESSAGE_FORMATS } from "@foxglove-studio/app/dataProviders/constants"; import { DataProviderDescriptor, ExtensionPoint, diff --git a/app/dataProviders/RewriteBinaryDataProvider.test.ts b/app/dataProviders/RewriteBinaryDataProvider.test.ts index 5483416e162..9fe6f0b07f2 100644 --- a/app/dataProviders/RewriteBinaryDataProvider.test.ts +++ b/app/dataProviders/RewriteBinaryDataProvider.test.ts @@ -15,8 +15,8 @@ import { flatten } from "lodash"; import { TimeUtil } from "rosbag"; import MemoryDataProvider from "@foxglove-studio/app/dataProviders/MemoryDataProvider"; -import { mockExtensionPoint } from "@foxglove-studio/app/dataProviders/mockExtensionPoint"; import RewriteBinaryDataProvider from "@foxglove-studio/app/dataProviders/RewriteBinaryDataProvider"; +import { mockExtensionPoint } from "@foxglove-studio/app/dataProviders/mockExtensionPoint"; import { Message, TypedMessage } from "@foxglove-studio/app/players/types"; import { isBobject } from "@foxglove-studio/app/util/binaryObjects"; import naturalSort from "@foxglove-studio/app/util/naturalSort"; diff --git a/app/dataProviders/RpcDataProvider.test.ts b/app/dataProviders/RpcDataProvider.test.ts index fccc75f978b..9a242148fb1 100644 --- a/app/dataProviders/RpcDataProvider.test.ts +++ b/app/dataProviders/RpcDataProvider.test.ts @@ -15,8 +15,8 @@ import RpcDataProvider from "./RpcDataProvider"; import RpcDataProviderRemote from "./RpcDataProviderRemote"; import MemoryDataProvider from "@foxglove-studio/app/dataProviders/MemoryDataProvider"; import { mockExtensionPoint } from "@foxglove-studio/app/dataProviders/mockExtensionPoint"; -import Rpc, { createLinkedChannels } from "@foxglove-studio/app/util/Rpc"; import { DataProviderMetadata } from "@foxglove-studio/app/dataProviders/types"; +import Rpc, { createLinkedChannels } from "@foxglove-studio/app/util/Rpc"; const data = { messages: { diff --git a/app/dataProviders/WorkerDataProvider.ts b/app/dataProviders/WorkerDataProvider.ts index 661192db080..fa243075daa 100644 --- a/app/dataProviders/WorkerDataProvider.ts +++ b/app/dataProviders/WorkerDataProvider.ts @@ -13,17 +13,18 @@ import { Time } from "rosbag"; -import { DataProvider, InitializationResult } from "./types"; -import RpcDataProvider from "@foxglove-studio/app/dataProviders/RpcDataProvider"; import { + DataProvider, + InitializationResult, DataProviderDescriptor, ExtensionPoint, GetMessagesResult, GetMessagesTopics, -} from "@foxglove-studio/app/dataProviders/types"; +} from "./types"; +import RpcDataProvider from "@foxglove-studio/app/dataProviders/RpcDataProvider"; import { getGlobalHooks } from "@foxglove-studio/app/loadWebviz"; import Rpc from "@foxglove-studio/app/util/Rpc"; -// eslint-disable-next-line import/no-unresolved +// eslint-disable-next-line import/default import WorkerDataProviderWorker from "worker-loader!@foxglove-studio/app/dataProviders/WorkerDataProvider.worker"; const params = new URLSearchParams(window.location.search); diff --git a/app/dataProviders/WorkerDataProvider.worker.ts b/app/dataProviders/WorkerDataProvider.worker.ts index 81de07b0faa..07871f2b36b 100644 --- a/app/dataProviders/WorkerDataProvider.worker.ts +++ b/app/dataProviders/WorkerDataProvider.worker.ts @@ -13,10 +13,10 @@ import ApiCheckerDataProvider from "@foxglove-studio/app/dataProviders/ApiCheckerDataProvider"; import BagDataProvider from "@foxglove-studio/app/dataProviders/BagDataProvider"; -import createGetDataProvider from "@foxglove-studio/app/dataProviders/createGetDataProvider"; import IdbCacheWriterDataProvider from "@foxglove-studio/app/dataProviders/IdbCacheWriterDataProvider"; import MeasureDataProvider from "@foxglove-studio/app/dataProviders/MeasureDataProvider"; import RpcDataProviderRemote from "@foxglove-studio/app/dataProviders/RpcDataProviderRemote"; +import createGetDataProvider from "@foxglove-studio/app/dataProviders/createGetDataProvider"; import Rpc from "@foxglove-studio/app/util/Rpc"; const getDataProvider = createGetDataProvider({ diff --git a/app/dataProviders/rootGetDataProvider.ts b/app/dataProviders/rootGetDataProvider.ts index 87148d64519..fabcecd0d3f 100644 --- a/app/dataProviders/rootGetDataProvider.ts +++ b/app/dataProviders/rootGetDataProvider.ts @@ -16,7 +16,6 @@ import ApiCheckerDataProvider, { } from "@foxglove-studio/app/dataProviders/ApiCheckerDataProvider"; import BagDataProvider from "@foxglove-studio/app/dataProviders/BagDataProvider"; import CombinedDataProvider from "@foxglove-studio/app/dataProviders/CombinedDataProvider"; -import createGetDataProvider from "@foxglove-studio/app/dataProviders/createGetDataProvider"; import IdbCacheReaderDataProvider from "@foxglove-studio/app/dataProviders/IdbCacheReaderDataProvider"; import MeasureDataProvider, { instrumentTreeWithMeasureDataProvider, @@ -25,8 +24,9 @@ import MemoryCacheDataProvider from "@foxglove-studio/app/dataProviders/MemoryCa import ParseMessagesDataProvider from "@foxglove-studio/app/dataProviders/ParseMessagesDataProvider"; import RenameDataProvider from "@foxglove-studio/app/dataProviders/RenameDataProvider"; import RewriteBinaryDataProvider from "@foxglove-studio/app/dataProviders/RewriteBinaryDataProvider"; -import { DataProviderDescriptor, DataProvider } from "@foxglove-studio/app/dataProviders/types"; import WorkerDataProvider from "@foxglove-studio/app/dataProviders/WorkerDataProvider"; +import createGetDataProvider from "@foxglove-studio/app/dataProviders/createGetDataProvider"; +import { DataProviderDescriptor, DataProvider } from "@foxglove-studio/app/dataProviders/types"; import { MEASURE_DATA_PROVIDERS_QUERY_KEY } from "@foxglove-studio/app/util/globalConstants"; const getDataProviderBase = createGetDataProvider({ diff --git a/app/hooks/usePrompt.tsx b/app/hooks/usePrompt.tsx index b4e6f3504f9..38578f4d146 100644 --- a/app/hooks/usePrompt.tsx +++ b/app/hooks/usePrompt.tsx @@ -5,8 +5,8 @@ import { useState } from "react"; import styled from "styled-components"; -import Modal from "@foxglove-studio/app/components/Modal"; import Button from "@foxglove-studio/app/components/Button"; +import Modal from "@foxglove-studio/app/components/Modal"; import renderToBody from "@foxglove-studio/app/components/renderToBody"; const ModalContent = styled.div` diff --git a/app/index.tsx b/app/index.tsx index f0869ab0ff7..c2888de3bfe 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -6,12 +6,11 @@ import ReactDOM from "react-dom"; import "@foxglove-studio/app/styles/global.scss"; +import { App } from "@foxglove-studio/app/App"; +import { getGlobalConfig } from "@foxglove-studio/app/GlobalConfig"; import installDevtoolsFormatters from "@foxglove-studio/app/util/installDevtoolsFormatters"; import overwriteFetch from "@foxglove-studio/app/util/overwriteFetch"; import waitForFonts from "@foxglove-studio/app/util/waitForFonts"; -import { getGlobalConfig } from "@foxglove-studio/app/GlobalConfig"; - -import { App } from "@foxglove-studio/app/App"; installDevtoolsFormatters(); overwriteFetch(); diff --git a/app/panels/GlobalVariableSlider/index.tsx b/app/panels/GlobalVariableSlider/index.tsx index 8bf7f301664..b76a114807b 100644 --- a/app/panels/GlobalVariableSlider/index.tsx +++ b/app/panels/GlobalVariableSlider/index.tsx @@ -11,9 +11,9 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import React, { ReactNode, useCallback, useMemo } from "react"; import { hot } from "react-hot-loader/root"; +import { $Shape } from "utility-types"; import GlobalVariableSlider from "@foxglove-studio/app/components/GlobalVariableSlider"; import Item from "@foxglove-studio/app/components/Menu/Item"; diff --git a/app/panels/GlobalVariables/index.stories.tsx b/app/panels/GlobalVariables/index.stories.tsx index f654c35819f..0178f63124f 100644 --- a/app/panels/GlobalVariables/index.stories.tsx +++ b/app/panels/GlobalVariables/index.stories.tsx @@ -15,8 +15,8 @@ import { storiesOf } from "@storybook/react"; import * as React from "react"; import GlobalVariables from "./index"; -import delay from "@foxglove-studio/app/shared/delay"; import { LinkedGlobalVariable } from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/useLinkedGlobalVariables"; +import delay from "@foxglove-studio/app/shared/delay"; import PanelSetup, { triggerInputChange } from "@foxglove-studio/app/stories/PanelSetup"; const exampleVariables = { diff --git a/app/panels/ImageView/CameraModel.ts b/app/panels/ImageView/CameraModel.ts index 7336a4e29df..9829e23a3cc 100644 --- a/app/panels/ImageView/CameraModel.ts +++ b/app/panels/ImageView/CameraModel.ts @@ -12,6 +12,7 @@ // You may not use this file except in compliance with the License. import { $Values } from "utility-types"; + import { Point, CameraInfo } from "@foxglove-studio/app/types/Messages"; const DISTORTION_STATE = { diff --git a/app/panels/ImageView/ImageCanvas.tsx b/app/panels/ImageView/ImageCanvas.tsx index 49ab4ec3fbc..da685e593d5 100644 --- a/app/panels/ImageView/ImageCanvas.tsx +++ b/app/panels/ImageView/ImageCanvas.tsx @@ -25,7 +25,6 @@ import uuid from "uuid"; import styles from "./ImageCanvas.module.scss"; // eslint-disable-next-line import/no-unresolved -import ImageCanvasWorker from "worker-loader!./ImageCanvas.worker"; import { ImageViewPanelHooks, Config, SaveImagePanelConfig } from "./index"; import { renderImage } from "./renderImage"; import { checkOutOfBounds, Dimensions } from "./util"; @@ -36,11 +35,12 @@ import { Message, Topic } from "@foxglove-studio/app/players/types"; import colors from "@foxglove-studio/app/styles/colors.module.scss"; import { CameraInfo } from "@foxglove-studio/app/types/Messages"; import { downloadFiles } from "@foxglove-studio/app/util"; -import debouncePromise from "@foxglove-studio/app/util/debouncePromise"; import Rpc from "@foxglove-studio/app/util/Rpc"; +import WebWorkerManager from "@foxglove-studio/app/util/WebWorkerManager"; +import debouncePromise from "@foxglove-studio/app/util/debouncePromise"; import sendNotification from "@foxglove-studio/app/util/sendNotification"; import supportsOffscreenCanvas from "@foxglove-studio/app/util/supportsOffscreenCanvas"; -import WebWorkerManager from "@foxglove-studio/app/util/WebWorkerManager"; +import ImageCanvasWorker from "worker-loader!./ImageCanvas.worker"; type OnFinishRenderImage = () => void; type Props = { diff --git a/app/panels/ImageView/index.tsx b/app/panels/ImageView/index.tsx index 1eea4244a8c..e4b31c6d0da 100644 --- a/app/panels/ImageView/index.tsx +++ b/app/panels/ImageView/index.tsx @@ -33,6 +33,7 @@ import { getMarkerOptions, groupTopics, } from "./util"; +import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import Autocomplete from "@foxglove-studio/app/components/Autocomplete"; import ChildToggle from "@foxglove-studio/app/components/ChildToggle"; import Dropdown from "@foxglove-studio/app/components/Dropdown"; @@ -47,7 +48,6 @@ import Panel from "@foxglove-studio/app/components/Panel"; import PanelToolbar from "@foxglove-studio/app/components/PanelToolbar"; import filterMap from "@foxglove-studio/app/filterMap"; import { getGlobalHooks } from "@foxglove-studio/app/loadWebviz"; -import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import { Message, TypedMessage } from "@foxglove-studio/app/players/types"; import inScreenshotTests from "@foxglove-studio/app/stories/inScreenshotTests"; import colors from "@foxglove-studio/app/styles/colors.module.scss"; diff --git a/app/panels/ImageView/renderImage.ts b/app/panels/ImageView/renderImage.ts index ceba4f819ee..a3ecdfe48e6 100644 --- a/app/panels/ImageView/renderImage.ts +++ b/app/panels/ImageView/renderImage.ts @@ -12,6 +12,7 @@ // You may not use this file except in compliance with the License. import { $ReadOnly } from "utility-types"; + import CameraModel from "./CameraModel"; import { decodeYUV, diff --git a/app/panels/Internals.tsx b/app/panels/Internals.tsx index 866fafc58a6..fb10284f19b 100644 --- a/app/panels/Internals.tsx +++ b/app/panels/Internals.tsx @@ -16,6 +16,7 @@ import * as React from "react"; import { hot } from "react-hot-loader/root"; import styled from "styled-components"; +import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import Button from "@foxglove-studio/app/components/Button"; import Dropdown from "@foxglove-studio/app/components/Dropdown"; import Flex from "@foxglove-studio/app/components/Flex"; @@ -26,7 +27,6 @@ import Panel from "@foxglove-studio/app/components/Panel"; import PanelToolbar from "@foxglove-studio/app/components/PanelToolbar"; import TextContent from "@foxglove-studio/app/components/TextContent"; import filterMap from "@foxglove-studio/app/filterMap"; -import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import { Topic, Message, diff --git a/app/panels/NodePlayground/BottomBar/DiagnosticsSection.tsx b/app/panels/NodePlayground/BottomBar/DiagnosticsSection.tsx index c03a7233846..8a889317693 100644 --- a/app/panels/NodePlayground/BottomBar/DiagnosticsSection.tsx +++ b/app/panels/NodePlayground/BottomBar/DiagnosticsSection.tsx @@ -19,7 +19,6 @@ import React from "react"; import Icon from "@foxglove-studio/app/components/Icon"; import { Diagnostic, DiagnosticSeverity } from "@foxglove-studio/app/players/UserNodePlayer/types"; - import { colors } from "@foxglove-studio/app/util/sharedStyleConstants"; const severityColors = { diff --git a/app/panels/NodePlayground/BottomBar/index.tsx b/app/panels/NodePlayground/BottomBar/index.tsx index cc239cf319c..973f6342e77 100644 --- a/app/panels/NodePlayground/BottomBar/index.tsx +++ b/app/panels/NodePlayground/BottomBar/index.tsx @@ -54,8 +54,6 @@ const HeaderItem = ({ isOpen, numItems, text }: HeaderItemProps) => ( ); -type BottomBarDisplayState = "closed" | "diagnostics" | "logs"; - const BottomBar = ({ nodeId, isSaved, save, diagnostics, logs }: Props) => { const [bottomBarDisplay, setBottomBarDisplay] = useState("closed"); const [autoScroll, setAutoScroll] = useState(true); diff --git a/app/panels/NodePlayground/index.stories.tsx b/app/panels/NodePlayground/index.stories.tsx index 640326bf11d..6a82a93d497 100644 --- a/app/panels/NodePlayground/index.stories.tsx +++ b/app/panels/NodePlayground/index.stories.tsx @@ -19,12 +19,12 @@ import NodePlayground, { Explorer, NodePlaygroundSettings, } from "@foxglove-studio/app/panels/NodePlayground"; -import testDocs from "@foxglove-studio/app/panels/NodePlayground/index.test.md"; import Sidebar from "@foxglove-studio/app/panels/NodePlayground/Sidebar"; +import testDocs from "@foxglove-studio/app/panels/NodePlayground/index.test.md"; +import { UserNodeLog } from "@foxglove-studio/app/players/UserNodePlayer/types"; import PanelSetup from "@foxglove-studio/app/stories/PanelSetup"; import { SExpectedResult } from "@foxglove-studio/app/stories/storyHelpers"; import { DEFAULT_WEBVIZ_NODE_PREFIX } from "@foxglove-studio/app/util/globalConstants"; -import { UserNodeLog } from "@foxglove-studio/app/players/UserNodePlayer/types"; const userNodes = { nodeId1: { name: "/webviz_node/node", sourceCode: "const someVariableName = 1;" }, diff --git a/app/panels/NodePlayground/index.tsx b/app/panels/NodePlayground/index.tsx index e23b204b84c..6ff97854e03 100644 --- a/app/panels/NodePlayground/index.tsx +++ b/app/panels/NodePlayground/index.tsx @@ -11,7 +11,6 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import ArrowLeftIcon from "@mdi/svg/svg/arrow-left.svg"; import CheckboxBlankOutlineIcon from "@mdi/svg/svg/checkbox-blank-outline.svg"; import CheckboxMarkedIcon from "@mdi/svg/svg/checkbox-marked.svg"; @@ -20,6 +19,7 @@ import * as React from "react"; import { hot } from "react-hot-loader/root"; import { useSelector, useDispatch } from "react-redux"; import styled from "styled-components"; +import { $Shape } from "utility-types"; import uuid from "uuid"; import { Script } from "./script"; @@ -34,8 +34,8 @@ import PanelToolbar from "@foxglove-studio/app/components/PanelToolbar"; import SpinningLoadingIcon from "@foxglove-studio/app/components/SpinningLoadingIcon"; import TextContent from "@foxglove-studio/app/components/TextContent"; import BottomBar from "@foxglove-studio/app/panels/NodePlayground/BottomBar"; -import Playground from "@foxglove-studio/app/panels/NodePlayground/playground-icon.svg"; import Sidebar from "@foxglove-studio/app/panels/NodePlayground/Sidebar"; +import Playground from "@foxglove-studio/app/panels/NodePlayground/playground-icon.svg"; import { UserNodes } from "@foxglove-studio/app/types/panels"; import { DEFAULT_WEBVIZ_NODE_PREFIX } from "@foxglove-studio/app/util/globalConstants"; import { colors } from "@foxglove-studio/app/util/sharedStyleConstants"; diff --git a/app/panels/NumberOfRenders.tsx b/app/panels/NumberOfRenders.tsx index e0d8a07de22..3c7d0dd6743 100644 --- a/app/panels/NumberOfRenders.tsx +++ b/app/panels/NumberOfRenders.tsx @@ -13,6 +13,7 @@ import * as React from "react"; import { hot } from "react-hot-loader/root"; +import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import Flex from "@foxglove-studio/app/components/Flex"; import MessageHistoryDEPRECATED from "@foxglove-studio/app/components/MessageHistoryDEPRECATED"; import { @@ -21,7 +22,6 @@ import { } from "@foxglove-studio/app/components/MessagePipeline"; import Panel from "@foxglove-studio/app/components/Panel"; import PanelToolbar from "@foxglove-studio/app/components/PanelToolbar"; -import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import inScreenshotTests from "@foxglove-studio/app/stories/inScreenshotTests"; const MAX_ALLOWABLE_RENDER_COUNT = 10; diff --git a/app/panels/PlaybackPerformance/index.tsx b/app/panels/PlaybackPerformance/index.tsx index b4a94ab63cd..06dece7ca75 100644 --- a/app/panels/PlaybackPerformance/index.tsx +++ b/app/panels/PlaybackPerformance/index.tsx @@ -11,10 +11,11 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $ReadOnly } from "utility-types"; import { last, sumBy } from "lodash"; import * as React from "react"; +import { ReactElement } from "react"; import { hot } from "react-hot-loader/root"; +import { $ReadOnly } from "utility-types"; import helpContent from "./index.help.md"; import Flex from "@foxglove-studio/app/components/Flex"; @@ -24,7 +25,6 @@ import PanelToolbar from "@foxglove-studio/app/components/PanelToolbar"; import { Sparkline, SparklinePoint } from "@foxglove-studio/app/components/Sparkline"; import { PlayerStateActiveData } from "@foxglove-studio/app/players/types"; import { subtractTimes, toSec } from "@foxglove-studio/app/util/time"; -import { ReactElement } from "react"; const TIME_RANGE = 5000; diff --git a/app/panels/Plot/PlotChart.tsx b/app/panels/Plot/PlotChart.tsx index 0d961d9bbd7..cc3adeccf66 100644 --- a/app/panels/Plot/PlotChart.tsx +++ b/app/panels/Plot/PlotChart.tsx @@ -17,8 +17,8 @@ import { createSelector } from "reselect"; import { Time } from "rosbag"; import uuid from "uuid"; -import { PlotXAxisVal } from "./index"; import styles from "./PlotChart.module.scss"; +import { PlotXAxisVal } from "./index"; import Dimensions from "@foxglove-studio/app/components/Dimensions"; import TimeBasedChart, { ChartDefaultView, diff --git a/app/panels/Plot/PlotLegend.tsx b/app/panels/Plot/PlotLegend.tsx index 3d64dd6737b..4a89eec9189 100644 --- a/app/panels/Plot/PlotLegend.tsx +++ b/app/panels/Plot/PlotLegend.tsx @@ -11,15 +11,15 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import AlertCircleIcon from "@mdi/svg/svg/alert-circle.svg"; import MenuIcon from "@mdi/svg/svg/menu.svg"; import cx from "classnames"; import { last } from "lodash"; import React, { useCallback, useMemo } from "react"; +import { $Shape } from "utility-types"; -import { plotableRosTypes, PlotConfig, PlotXAxisVal } from "./index"; import styles from "./PlotLegend.module.scss"; +import { plotableRosTypes, PlotConfig, PlotXAxisVal } from "./index"; import Dropdown from "@foxglove-studio/app/components/Dropdown"; import Icon from "@foxglove-studio/app/components/Icon"; import MessagePathInput from "@foxglove-studio/app/components/MessagePathSyntax/MessagePathInput"; diff --git a/app/panels/Plot/PlotMenu.tsx b/app/panels/Plot/PlotMenu.tsx index fdc0eb5af09..65c00f85ee0 100644 --- a/app/panels/Plot/PlotMenu.tsx +++ b/app/panels/Plot/PlotMenu.tsx @@ -11,17 +11,17 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import cx from "classnames"; import React, { useMemo, useRef } from "react"; import styled from "styled-components"; +import { $Shape } from "utility-types"; import styles from "./PlotMenu.module.scss"; -import { PanelToolbarInput } from "@foxglove-studio/app/shared/panelToolbarStyles"; import Item from "@foxglove-studio/app/components/Menu/Item"; import { TimeBasedChartTooltipData } from "@foxglove-studio/app/components/TimeBasedChart"; import { PlotConfig, PlotXAxisVal } from "@foxglove-studio/app/panels/Plot"; import { DataSet, PlotChartPoint } from "@foxglove-studio/app/panels/Plot/PlotChart"; +import { PanelToolbarInput } from "@foxglove-studio/app/shared/panelToolbarStyles"; import { downloadFiles } from "@foxglove-studio/app/util"; import { formatTimeRaw } from "@foxglove-studio/app/util/time"; diff --git a/app/panels/Plot/index.tsx b/app/panels/Plot/index.tsx index 58b0f58ec1c..2473ef1d6d0 100644 --- a/app/panels/Plot/index.tsx +++ b/app/panels/Plot/index.tsx @@ -11,14 +11,19 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import { compact, uniq } from "lodash"; import memoizeWeak from "memoize-weak"; import React, { useEffect, useCallback, useMemo, useRef } from "react"; import { hot } from "react-hot-loader/root"; import { Time, TimeUtil } from "rosbag"; +import { $Shape } from "utility-types"; import helpContent from "./index.help.md"; +import { + useBlocksByTopic, + useDataSourceInfo, + useMessagesByTopic, +} from "@foxglove-studio/app/PanelAPI"; import Flex from "@foxglove-studio/app/components/Flex"; import { MessageHistoryItemsByPath } from "@foxglove-studio/app/components/MessageHistoryDEPRECATED"; import { getTopicsFromPaths } from "@foxglove-studio/app/components/MessagePathSyntax/parseRosPath"; @@ -30,18 +35,13 @@ import { getTooltipItemForMessageHistoryItem, TooltipItem, } from "@foxglove-studio/app/components/TimeBasedChart"; -import { - useBlocksByTopic, - useDataSourceInfo, - useMessagesByTopic, -} from "@foxglove-studio/app/PanelAPI"; -import { BasePlotPath, PlotPath } from "@foxglove-studio/app/panels/Plot/internalTypes"; import PlotChart, { getDatasetsAndTooltips, PlotDataByPath, } from "@foxglove-studio/app/panels/Plot/PlotChart"; import PlotLegend from "@foxglove-studio/app/panels/Plot/PlotLegend"; import PlotMenu from "@foxglove-studio/app/panels/Plot/PlotMenu"; +import { BasePlotPath, PlotPath } from "@foxglove-studio/app/panels/Plot/internalTypes"; import { PanelConfig } from "@foxglove-studio/app/types/panels"; import { useShallowMemo } from "@foxglove-studio/app/util/hooks"; import { fromSec, subtractTimes, toSec } from "@foxglove-studio/app/util/time"; diff --git a/app/panels/Publish/index.tsx b/app/panels/Publish/index.tsx index 1e152f6041c..5103331a758 100644 --- a/app/panels/Publish/index.tsx +++ b/app/panels/Publish/index.tsx @@ -11,18 +11,14 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import CheckboxBlankOutlineIcon from "@mdi/svg/svg/checkbox-blank-outline.svg"; import CheckboxMarkedIcon from "@mdi/svg/svg/checkbox-marked.svg"; import * as React from "react"; import { hot } from "react-hot-loader/root"; import styled from "styled-components"; +import { $Shape } from "utility-types"; import buildSampleMessage from "./buildSampleMessage"; -import { - PanelToolbarInput, - PanelToolbarLabel, -} from "@foxglove-studio/app/shared/panelToolbarStyles"; import Autocomplete from "@foxglove-studio/app/components/Autocomplete"; import Button from "@foxglove-studio/app/components/Button"; import Flex from "@foxglove-studio/app/components/Flex"; @@ -31,6 +27,10 @@ import Panel from "@foxglove-studio/app/components/Panel"; import PanelToolbar from "@foxglove-studio/app/components/PanelToolbar"; import Publisher from "@foxglove-studio/app/components/Publisher"; import { PlayerCapabilities, Topic } from "@foxglove-studio/app/players/types"; +import { + PanelToolbarInput, + PanelToolbarLabel, +} from "@foxglove-studio/app/shared/panelToolbarStyles"; import colors from "@foxglove-studio/app/styles/colors.module.scss"; import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; diff --git a/app/panels/RawMessages/RawMessagesIcons.tsx b/app/panels/RawMessages/RawMessagesIcons.tsx index ea884fcacff..7b168b7bbdb 100644 --- a/app/panels/RawMessages/RawMessagesIcons.tsx +++ b/app/panels/RawMessages/RawMessagesIcons.tsx @@ -14,7 +14,7 @@ import ChartBubbleIcon from "@mdi/svg/svg/chart-bubble.svg"; import ChartLineVariantIcon from "@mdi/svg/svg/chart-line-variant.svg"; import DotsHorizontalIcon from "@mdi/svg/svg/dots-horizontal.svg"; import TargetIcon from "@mdi/svg/svg/target.svg"; -import React, { ReactElement, ReactNode, useCallback } from "react"; +import { ReactElement, useCallback } from "react"; import { ValueAction } from "./getValueActionForValue"; import styles from "./index.module.scss"; diff --git a/app/panels/RawMessages/index.tsx b/app/panels/RawMessages/index.tsx index 2642c69e5e8..62636a98078 100644 --- a/app/panels/RawMessages/index.tsx +++ b/app/panels/RawMessages/index.tsx @@ -11,7 +11,6 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import CheckboxBlankOutlineIcon from "@mdi/svg/svg/checkbox-blank-outline.svg"; import CheckboxMarkedIcon from "@mdi/svg/svg/checkbox-marked.svg"; import ConsoleLineIcon from "@mdi/svg/svg/console-line.svg"; @@ -24,8 +23,11 @@ import React, { useState, useCallback, useMemo } from "react"; import { hot } from "react-hot-loader/root"; import ReactHoverObserver from "react-hover-observer"; import Tree from "react-json-tree"; +import { $Shape } from "utility-types"; import { HighlightedValue, SDiffSpan, MaybeCollapsedValue } from "./Diff"; +import Metadata from "./Metadata"; +import RawMessagesIcons from "./RawMessagesIcons"; import { ValueAction, getValueActionForValue, @@ -33,18 +35,17 @@ import { } from "./getValueActionForValue"; import helpContent from "./index.help.md"; import styles from "./index.module.scss"; -import Metadata from "./Metadata"; -import RawMessagesIcons from "./RawMessagesIcons"; import { DATA_ARRAY_PREVIEW_LIMIT, getItemString, getItemStringForDiff } from "./utils"; +import { useDataSourceInfo, useMessagesByTopic } from "@foxglove-studio/app/PanelAPI"; import Dropdown from "@foxglove-studio/app/components/Dropdown"; import EmptyState from "@foxglove-studio/app/components/EmptyState"; import Flex from "@foxglove-studio/app/components/Flex"; import Icon from "@foxglove-studio/app/components/Icon"; +import MessagePathInput from "@foxglove-studio/app/components/MessagePathSyntax/MessagePathInput"; import { RosPath, MessagePathStructureItem, } from "@foxglove-studio/app/components/MessagePathSyntax/constants"; -import MessagePathInput from "@foxglove-studio/app/components/MessagePathSyntax/MessagePathInput"; import { messagePathStructures, traverseStructure, @@ -58,7 +59,6 @@ import { useLatestMessageDataItem } from "@foxglove-studio/app/components/Messag import Panel from "@foxglove-studio/app/components/Panel"; import PanelToolbar from "@foxglove-studio/app/components/PanelToolbar"; import Tooltip from "@foxglove-studio/app/components/Tooltip"; -import { useDataSourceInfo, useMessagesByTopic } from "@foxglove-studio/app/PanelAPI"; import getDiff, { diffLabels, diffLabelsByLabelText, @@ -297,6 +297,7 @@ function RawMessages(props: Props) { console.log(itemValue)} tooltip="Log data to browser console" > diff --git a/app/panels/Rosout/index.tsx b/app/panels/Rosout/index.tsx index 87173f02ee2..c35f56e06bb 100644 --- a/app/panels/Rosout/index.tsx +++ b/app/panels/Rosout/index.tsx @@ -11,7 +11,6 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $ReadOnly } from "utility-types"; import ClipboardOutlineIcon from "@mdi/svg/svg/clipboard-outline.svg"; import cx from "classnames"; import React, { PureComponent } from "react"; @@ -19,12 +18,13 @@ import { hot } from "react-hot-loader/root"; import { Creatable as ReactSelectCreatable } from "react-select"; import VirtualizedSelect from "react-virtualized-select"; import { createSelector } from "reselect"; +import { $ReadOnly } from "utility-types"; -import helpContent from "./index.help.md"; -import styles from "./index.module.scss"; import LevelToString, { KNOWN_LOG_LEVELS } from "./LevelToString"; import LogMessage from "./LogMessage"; import logStyle from "./LogMessage.module.scss"; +import helpContent from "./index.help.md"; +import styles from "./index.module.scss"; import Flex from "@foxglove-studio/app/components/Flex"; import Icon from "@foxglove-studio/app/components/Icon"; import LogList from "@foxglove-studio/app/components/LogList"; diff --git a/app/panels/StateTransitions/index.tsx b/app/panels/StateTransitions/index.tsx index 59791d41343..3f4ab76e992 100644 --- a/app/panels/StateTransitions/index.tsx +++ b/app/panels/StateTransitions/index.tsx @@ -11,13 +11,13 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import { uniq } from "lodash"; import * as React from "react"; import { hot } from "react-hot-loader/root"; import stringHash from "string-hash"; import styled, { css } from "styled-components"; import tinycolor from "tinycolor2"; +import { $Shape } from "utility-types"; import helpContent from "./index.help.md"; import Button from "@foxglove-studio/app/components/Button"; @@ -40,7 +40,6 @@ import { positiveModulo } from "@foxglove-studio/app/util"; import { darkColor, lineColors } from "@foxglove-studio/app/util/plotColors"; import { colors } from "@foxglove-studio/app/util/sharedStyleConstants"; import { TimestampMethod, subtractTimes, toSec } from "@foxglove-studio/app/util/time"; - import { grey } from "@foxglove-studio/app/util/toolsColorScheme"; export const transitionableRosTypes = [ diff --git a/app/panels/SubscribeToList.tsx b/app/panels/SubscribeToList.tsx index d857e9bfe90..10be0a99b1b 100644 --- a/app/panels/SubscribeToList.tsx +++ b/app/panels/SubscribeToList.tsx @@ -13,10 +13,10 @@ import * as React from "react"; import { hot } from "react-hot-loader/root"; +import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import Flex from "@foxglove-studio/app/components/Flex"; import Panel from "@foxglove-studio/app/components/Panel"; import PanelToolbar from "@foxglove-studio/app/components/PanelToolbar"; -import * as PanelAPI from "@foxglove-studio/app/PanelAPI"; import { SaveConfig } from "@foxglove-studio/app/types/panels"; // Little dummy panel that just subscribes to a bunch of topics. Doesn't actually diff --git a/app/panels/Tab/TabbedToolbar.tsx b/app/panels/Tab/TabbedToolbar.tsx index 88f7b8879a5..8f76266153e 100644 --- a/app/panels/Tab/TabbedToolbar.tsx +++ b/app/panels/Tab/TabbedToolbar.tsx @@ -21,13 +21,13 @@ import { moveTab, MoveTabPayload } from "@foxglove-studio/app/actions/panels"; import Icon from "@foxglove-studio/app/components/Icon"; import PanelToolbar from "@foxglove-studio/app/components/PanelToolbar"; import { DraggableToolbarTab } from "@foxglove-studio/app/panels/Tab/DraggableToolbarTab"; -import helpContent from "@foxglove-studio/app/panels/Tab/index.help.md"; import { DraggingTabItem, TAB_DRAG_TYPE, TabActions, TabDndContext, } from "@foxglove-studio/app/panels/Tab/TabDndContext"; +import helpContent from "@foxglove-studio/app/panels/Tab/index.help.md"; import { TabConfig } from "@foxglove-studio/app/types/layouts"; import { colors } from "@foxglove-studio/app/util/sharedStyleConstants"; diff --git a/app/panels/Tab/ToolbarTab.stories.tsx b/app/panels/Tab/ToolbarTab.stories.tsx index 6b225a03083..41bda6b5e20 100644 --- a/app/panels/Tab/ToolbarTab.stories.tsx +++ b/app/panels/Tab/ToolbarTab.stories.tsx @@ -15,8 +15,8 @@ import { storiesOf } from "@storybook/react"; import { noop } from "lodash"; import React, { ReactNode } from "react"; -import tick from "@foxglove-studio/app/shared/tick"; import { ToolbarTab } from "@foxglove-studio/app/panels/Tab/ToolbarTab"; +import tick from "@foxglove-studio/app/shared/tick"; const baseProps = { hidden: false, diff --git a/app/panels/Tab/index.stories.tsx b/app/panels/Tab/index.stories.tsx index 77374a8a88a..ddb8ee2dac0 100644 --- a/app/panels/Tab/index.stories.tsx +++ b/app/panels/Tab/index.stories.tsx @@ -17,10 +17,10 @@ import React from "react"; import TestUtils from "react-dom/test-utils"; import Tab from "./index"; -import tick from "@foxglove-studio/app/shared/tick"; import PanelLayout from "@foxglove-studio/app/components/PanelLayout"; import nestedTabLayoutFixture from "@foxglove-studio/app/panels/Tab/nestedTabLayoutFixture.test"; import createRootReducer from "@foxglove-studio/app/reducers"; +import tick from "@foxglove-studio/app/shared/tick"; import configureStore from "@foxglove-studio/app/store/configureStore.testing"; import PanelSetup from "@foxglove-studio/app/stories/PanelSetup"; import { SExpectedResult } from "@foxglove-studio/app/stories/storyHelpers"; diff --git a/app/panels/Tab/index.tsx b/app/panels/Tab/index.tsx index cc72659bde6..6cde48a2f2d 100644 --- a/app/panels/Tab/index.tsx +++ b/app/panels/Tab/index.tsx @@ -21,11 +21,11 @@ import Panel from "@foxglove-studio/app/components/Panel"; import { usePanelContext } from "@foxglove-studio/app/components/PanelContext"; import { UnconnectedPanelLayout } from "@foxglove-studio/app/components/PanelLayout"; import { EmptyDropTarget } from "@foxglove-studio/app/panels/Tab/EmptyDropTarget"; -import { TabbedToolbar } from "@foxglove-studio/app/panels/Tab/TabbedToolbar"; import { DraggingTabPanelState, TabDndContext, } from "@foxglove-studio/app/panels/Tab/TabDndContext"; +import { TabbedToolbar } from "@foxglove-studio/app/panels/Tab/TabbedToolbar"; import { TabPanelConfig as Config } from "@foxglove-studio/app/types/layouts"; import { SaveConfig } from "@foxglove-studio/app/types/panels"; import { TAB_PANEL_TYPE } from "@foxglove-studio/app/util/globalConstants"; diff --git a/app/panels/Table/index.tsx b/app/panels/Table/index.tsx index d98c6f7681d..cc70e522618 100644 --- a/app/panels/Table/index.tsx +++ b/app/panels/Table/index.tsx @@ -20,16 +20,16 @@ import { useTable, usePagination, useExpanded, useSortBy } from "react-table"; import styled from "styled-components"; import helpContent from "./index.help.md"; +import { useMessagesByTopic } from "@foxglove-studio/app/PanelAPI"; import EmptyState from "@foxglove-studio/app/components/EmptyState"; import Flex from "@foxglove-studio/app/components/Flex"; import Icon from "@foxglove-studio/app/components/Icon"; -import { RosPath } from "@foxglove-studio/app/components/MessagePathSyntax/constants"; import MessagePathInput from "@foxglove-studio/app/components/MessagePathSyntax/MessagePathInput"; +import { RosPath } from "@foxglove-studio/app/components/MessagePathSyntax/constants"; import parseRosPath from "@foxglove-studio/app/components/MessagePathSyntax/parseRosPath"; import { useCachedGetMessagePathDataItems } from "@foxglove-studio/app/components/MessagePathSyntax/useCachedGetMessagePathDataItems"; import Panel from "@foxglove-studio/app/components/Panel"; import PanelToolbar from "@foxglove-studio/app/components/PanelToolbar"; -import { useMessagesByTopic } from "@foxglove-studio/app/PanelAPI"; import { TableInstance, PaginationProps, diff --git a/app/panels/ThreeDimensionalViz/CameraInfo/index.tsx b/app/panels/ThreeDimensionalViz/CameraInfo/index.tsx index 3430871512b..466b7743175 100644 --- a/app/panels/ThreeDimensionalViz/CameraInfo/index.tsx +++ b/app/panels/ThreeDimensionalViz/CameraInfo/index.tsx @@ -11,15 +11,14 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import CameraControlIcon from "@mdi/svg/svg/camera-control.svg"; import { vec3 } from "gl-matrix"; import { isEqual } from "lodash"; import * as React from "react"; import { CameraState, cameraStateSelectors } from "regl-worldview"; import styled from "styled-components"; +import { $Shape } from "utility-types"; -import { point2DValidator, cameraStateValidator } from "@foxglove-studio/app/shared/validators"; import Button from "@foxglove-studio/app/components/Button"; import ExpandingToolbar, { ToolGroup } from "@foxglove-studio/app/components/ExpandingToolbar"; import Flex from "@foxglove-studio/app/components/Flex"; @@ -44,6 +43,7 @@ import { getNewCameraStateOnFollowChange, TargetPose, } from "@foxglove-studio/app/panels/ThreeDimensionalViz/threeDimensionalVizUtils"; +import { point2DValidator, cameraStateValidator } from "@foxglove-studio/app/shared/validators"; import colors from "@foxglove-studio/app/styles/colors.module.scss"; import clipboard from "@foxglove-studio/app/util/clipboard"; diff --git a/app/panels/ThreeDimensionalViz/DrawingTools/Polygons.tsx b/app/panels/ThreeDimensionalViz/DrawingTools/Polygons.tsx index bb0b75e0e6a..5e7b7e80d3c 100644 --- a/app/panels/ThreeDimensionalViz/DrawingTools/Polygons.tsx +++ b/app/panels/ThreeDimensionalViz/DrawingTools/Polygons.tsx @@ -15,7 +15,6 @@ import * as React from "react"; import { PolygonBuilder, Polygon } from "regl-worldview"; import styled from "styled-components"; -import { polygonPointsValidator } from "@foxglove-studio/app/shared/validators"; import Button from "@foxglove-studio/app/components/Button"; import PanelContext from "@foxglove-studio/app/components/PanelContext"; import ValidatedInput, { EditFormat } from "@foxglove-studio/app/components/ValidatedInput"; @@ -29,6 +28,7 @@ import { pointsToPolygons, getPolygonLineDistances, } from "@foxglove-studio/app/panels/ThreeDimensionalViz/utils/drawToolUtils"; +import { polygonPointsValidator } from "@foxglove-studio/app/shared/validators"; import clipboard from "@foxglove-studio/app/util/clipboard"; export type Point2D = { x: number; y: number }; diff --git a/app/panels/ThreeDimensionalViz/GlobalVariableStyles.tsx b/app/panels/ThreeDimensionalViz/GlobalVariableStyles.tsx index 9bf6365b19c..cbc271bef4b 100644 --- a/app/panels/ThreeDimensionalViz/GlobalVariableStyles.tsx +++ b/app/panels/ThreeDimensionalViz/GlobalVariableStyles.tsx @@ -23,8 +23,8 @@ import ExpandingToolbar, { ToolGroupFixedSizePane, } from "@foxglove-studio/app/components/ExpandingToolbar"; import Icon from "@foxglove-studio/app/components/Icon"; -import { JSONInput } from "@foxglove-studio/app/components/input/JSONInput"; import Tooltip from "@foxglove-studio/app/components/Tooltip"; +import { JSONInput } from "@foxglove-studio/app/components/input/JSONInput"; import useGlobalVariables from "@foxglove-studio/app/hooks/useGlobalVariables"; import useLinkedGlobalVariables from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/useLinkedGlobalVariables"; import styles from "@foxglove-studio/app/panels/ThreeDimensionalViz/Layout.module.scss"; diff --git a/app/panels/ThreeDimensionalViz/Interactions/GlobalVariableLink/LinkToGlobalVariable.tsx b/app/panels/ThreeDimensionalViz/Interactions/GlobalVariableLink/LinkToGlobalVariable.tsx index ecc9e0ef9a0..2d13f221e53 100644 --- a/app/panels/ThreeDimensionalViz/Interactions/GlobalVariableLink/LinkToGlobalVariable.tsx +++ b/app/panels/ThreeDimensionalViz/Interactions/GlobalVariableLink/LinkToGlobalVariable.tsx @@ -16,8 +16,8 @@ import classNames from "classnames"; import React, { FormEvent } from "react"; import useLinkedGlobalVariables from "../useLinkedGlobalVariables"; -import { SGlobalVariableForm, GlobalVariableName } from "./index"; import UnlinkGlobalVariables from "./UnlinkGlobalVariables"; +import { SGlobalVariableForm, GlobalVariableName } from "./index"; import Button from "@foxglove-studio/app/components/Button"; import ChildToggle from "@foxglove-studio/app/components/ChildToggle"; import Icon from "@foxglove-studio/app/components/Icon"; diff --git a/app/panels/ThreeDimensionalViz/Interactions/GlobalVariableLink/UnlinkGlobalVariables.tsx b/app/panels/ThreeDimensionalViz/Interactions/GlobalVariableLink/UnlinkGlobalVariables.tsx index 03d3ef1376a..a8c79b319e7 100644 --- a/app/panels/ThreeDimensionalViz/Interactions/GlobalVariableLink/UnlinkGlobalVariables.tsx +++ b/app/panels/ThreeDimensionalViz/Interactions/GlobalVariableLink/UnlinkGlobalVariables.tsx @@ -17,8 +17,8 @@ import styled from "styled-components"; import { getPath, memoizedGetLinkedGlobalVariablesKeyByName } from "../interactionUtils"; import useLinkedGlobalVariables, { LinkedGlobalVariable } from "../useLinkedGlobalVariables"; -import { SGlobalVariableLink, SPath, GlobalVariableName } from "./index"; import UnlinkWrapper from "./UnlinkWrapper"; +import { SGlobalVariableLink, SPath, GlobalVariableName } from "./index"; import Button from "@foxglove-studio/app/components/Button"; import { colors } from "@foxglove-studio/app/util/sharedStyleConstants"; diff --git a/app/panels/ThreeDimensionalViz/Interactions/Interaction.stories.tsx b/app/panels/ThreeDimensionalViz/Interactions/Interaction.stories.tsx index e4e2ec30fb3..fbb875cafa2 100644 --- a/app/panels/ThreeDimensionalViz/Interactions/Interaction.stories.tsx +++ b/app/panels/ThreeDimensionalViz/Interactions/Interaction.stories.tsx @@ -17,8 +17,6 @@ import styled from "styled-components"; import Interactions, { OBJECT_TAB_TYPE, LINKED_VARIABLES_TAB_TYPE } from "./index"; import useLinkedGlobalVariables from "./useLinkedGlobalVariables"; -import delay from "@foxglove-studio/app/shared/delay"; -import tick from "@foxglove-studio/app/shared/tick"; import Flex from "@foxglove-studio/app/components/Flex"; import MockPanelContextProvider from "@foxglove-studio/app/components/MockPanelContextProvider"; import useGlobalVariables from "@foxglove-studio/app/hooks/useGlobalVariables"; @@ -28,6 +26,8 @@ import { POINT_CLOUD_WITH_ADDITIONAL_FIELDS, } from "@foxglove-studio/app/panels/ThreeDimensionalViz/commands/PointClouds/fixture/pointCloudData"; import { MarkerStory } from "@foxglove-studio/app/panels/ThreeDimensionalViz/stories/MarkerStory"; +import delay from "@foxglove-studio/app/shared/delay"; +import tick from "@foxglove-studio/app/shared/tick"; import PanelSetup, { triggerInputChange } from "@foxglove-studio/app/stories/PanelSetup"; import { ScreenshotSizedContainer } from "@foxglove-studio/app/stories/storyHelpers"; import colors from "@foxglove-studio/app/styles/colors.module.scss"; diff --git a/app/panels/ThreeDimensionalViz/Interactions/InteractionContextMenu.tsx b/app/panels/ThreeDimensionalViz/Interactions/InteractionContextMenu.tsx index 1679a417462..d9b1132f6e2 100644 --- a/app/panels/ThreeDimensionalViz/Interactions/InteractionContextMenu.tsx +++ b/app/panels/ThreeDimensionalViz/Interactions/InteractionContextMenu.tsx @@ -17,11 +17,11 @@ import styled from "styled-components"; import { SelectedObject } from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/types"; import { ThreeDimensionalVizContext } from "@foxglove-studio/app/panels/ThreeDimensionalViz/ThreeDimensionalVizContext"; +import { ClickedPosition } from "@foxglove-studio/app/panels/ThreeDimensionalViz/TopicTree/Layout"; import { getInteractionData, getObject, } from "@foxglove-studio/app/panels/ThreeDimensionalViz/threeDimensionalVizUtils"; -import { ClickedPosition } from "@foxglove-studio/app/panels/ThreeDimensionalViz/TopicTree/Layout"; import { colors } from "@foxglove-studio/app/util/sharedStyleConstants"; const SInteractionContextMenu = styled.div` diff --git a/app/panels/ThreeDimensionalViz/Interactions/Interactions.tsx b/app/panels/ThreeDimensionalViz/Interactions/Interactions.tsx index 8de81c1e79a..328b2e72b81 100644 --- a/app/panels/ThreeDimensionalViz/Interactions/Interactions.tsx +++ b/app/panels/ThreeDimensionalViz/Interactions/Interactions.tsx @@ -26,10 +26,10 @@ import ExpandingToolbar, { } from "@foxglove-studio/app/components/ExpandingToolbar"; import Icon from "@foxglove-studio/app/components/Icon"; import PanelContext from "@foxglove-studio/app/components/PanelContext"; -import { decodeAdditionalFields } from "@foxglove-studio/app/panels/ThreeDimensionalViz/commands/PointClouds/selection"; import ObjectDetails from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/ObjectDetails"; import TopicLink from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/TopicLink"; import styles from "@foxglove-studio/app/panels/ThreeDimensionalViz/Layout.module.scss"; +import { decodeAdditionalFields } from "@foxglove-studio/app/panels/ThreeDimensionalViz/commands/PointClouds/selection"; import { getInteractionData } from "@foxglove-studio/app/panels/ThreeDimensionalViz/threeDimensionalVizUtils"; import { SaveConfig, PanelConfig } from "@foxglove-studio/app/types/panels"; import { colors } from "@foxglove-studio/app/util/sharedStyleConstants"; diff --git a/app/panels/ThreeDimensionalViz/Interactions/ObjectDetails.tsx b/app/panels/ThreeDimensionalViz/Interactions/ObjectDetails.tsx index 34136b6615a..e001cbd0ae0 100644 --- a/app/panels/ThreeDimensionalViz/Interactions/ObjectDetails.tsx +++ b/app/panels/ThreeDimensionalViz/Interactions/ObjectDetails.tsx @@ -11,12 +11,12 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $ReadOnly } from "utility-types"; import { first, omit, sortBy } from "lodash"; import * as React from "react"; import Tree from "react-json-tree"; import { MouseEventObject } from "regl-worldview"; import styled from "styled-components"; +import { $ReadOnly } from "utility-types"; import GlobalVariableLink from "./GlobalVariableLink/index"; import { InteractionData } from "./types"; diff --git a/app/panels/ThreeDimensionalViz/Interactions/types.ts b/app/panels/ThreeDimensionalViz/Interactions/types.ts index 85840e774fc..7e7c0ab9898 100644 --- a/app/panels/ThreeDimensionalViz/Interactions/types.ts +++ b/app/panels/ThreeDimensionalViz/Interactions/types.ts @@ -12,6 +12,7 @@ // You may not use this file except in compliance with the License. import { $ReadOnly } from "utility-types"; + import { RosObject } from "@foxglove-studio/app/players/types"; import { Marker } from "@foxglove-studio/app/types/Messages"; diff --git a/app/panels/ThreeDimensionalViz/LayoutToolbar.tsx b/app/panels/ThreeDimensionalViz/LayoutToolbar.tsx index 04e013ec611..6a62391d0c7 100644 --- a/app/panels/ThreeDimensionalViz/LayoutToolbar.tsx +++ b/app/panels/ThreeDimensionalViz/LayoutToolbar.tsx @@ -75,7 +75,6 @@ function LayoutToolbar({ onToggleDebug, polygonBuilder, rootTf, - saveConfig, searchInputRef, searchText, searchTextMatches, diff --git a/app/panels/ThreeDimensionalViz/PanelToolbarMenu.tsx b/app/panels/ThreeDimensionalViz/PanelToolbarMenu.tsx index a2b8300993b..d7becefffb3 100644 --- a/app/panels/ThreeDimensionalViz/PanelToolbarMenu.tsx +++ b/app/panels/ThreeDimensionalViz/PanelToolbarMenu.tsx @@ -11,7 +11,6 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Keys } from "utility-types"; import ArrowLeftIcon from "@mdi/svg/svg/arrow-left.svg"; import ArrowRightIcon from "@mdi/svg/svg/arrow-right.svg"; import CheckboxBlankOutlineIcon from "@mdi/svg/svg/checkbox-blank-outline.svg"; @@ -19,6 +18,7 @@ import CheckboxMarkedIcon from "@mdi/svg/svg/checkbox-marked.svg"; import SwapHorizontalIcon from "@mdi/svg/svg/swap-horizontal.svg"; import SyncIcon from "@mdi/svg/svg/sync.svg"; import React from "react"; +import { $Keys } from "utility-types"; import { Item, SubMenu } from "@foxglove-studio/app/components/Menu"; import PanelToolbar from "@foxglove-studio/app/components/PanelToolbar"; diff --git a/app/panels/ThreeDimensionalViz/SceneBuilder/index.ts b/app/panels/ThreeDimensionalViz/SceneBuilder/index.ts index aa5588c6153..276375e292f 100644 --- a/app/panels/ThreeDimensionalViz/SceneBuilder/index.ts +++ b/app/panels/ThreeDimensionalViz/SceneBuilder/index.ts @@ -37,8 +37,9 @@ import { } from "@foxglove-studio/app/types/Messages"; import { MarkerProvider, MarkerCollector, Scene } from "@foxglove-studio/app/types/Scene"; import { objectValues } from "@foxglove-studio/app/util"; -import { getField, getIndex, deepParse } from "@foxglove-studio/app/util/binaryObjects"; import Bounds from "@foxglove-studio/app/util/Bounds"; +import { emptyPose } from "@foxglove-studio/app/util/Pose"; +import { getField, getIndex, deepParse } from "@foxglove-studio/app/util/binaryObjects"; import { POSE_MARKER_SCALE, LINED_CONVEX_HULL_RENDERING_SETTING, @@ -56,7 +57,6 @@ import { GEOMETRY_MSGS_POLYGON_STAMPED_DATATYPE, } from "@foxglove-studio/app/util/globalConstants"; import naturalSort from "@foxglove-studio/app/util/naturalSort"; -import { emptyPose } from "@foxglove-studio/app/util/Pose"; import sendNotification from "@foxglove-studio/app/util/sendNotification"; import { fromSec } from "@foxglove-studio/app/util/time"; diff --git a/app/panels/ThreeDimensionalViz/SceneBuilder/types.ts b/app/panels/ThreeDimensionalViz/SceneBuilder/types.ts index 084cd809efc..73e70c98821 100644 --- a/app/panels/ThreeDimensionalViz/SceneBuilder/types.ts +++ b/app/panels/ThreeDimensionalViz/SceneBuilder/types.ts @@ -12,6 +12,7 @@ // You may not use this file except in compliance with the License. import { $ReadOnly } from "utility-types"; + import { Frame } from "@foxglove-studio/app/players/types"; import { Color, Pose } from "@foxglove-studio/app/types/Messages"; diff --git a/app/panels/ThreeDimensionalViz/TopicSettingsEditor/ColorPickerForTopicSettings.tsx b/app/panels/ThreeDimensionalViz/TopicSettingsEditor/ColorPickerForTopicSettings.tsx index c75a9d3a66c..52018e253df 100644 --- a/app/panels/ThreeDimensionalViz/TopicSettingsEditor/ColorPickerForTopicSettings.tsx +++ b/app/panels/ThreeDimensionalViz/TopicSettingsEditor/ColorPickerForTopicSettings.tsx @@ -11,12 +11,12 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Keys } from "utility-types"; import ColorPicker, { Panel as ColorPickerPanel } from "rc-color-picker"; import React from "react"; import { Color } from "regl-worldview"; import styled from "styled-components"; import tinyColor from "tinycolor2"; +import { $Keys } from "utility-types"; export const PICKER_SIZE = { NORMAL: { name: "NORMAL", size: 24 }, diff --git a/app/panels/ThreeDimensionalViz/TopicSettingsEditor/index.tsx b/app/panels/ThreeDimensionalViz/TopicSettingsEditor/index.tsx index f39c0bcd891..f0f405b0a53 100644 --- a/app/panels/ThreeDimensionalViz/TopicSettingsEditor/index.tsx +++ b/app/panels/ThreeDimensionalViz/TopicSettingsEditor/index.tsx @@ -15,12 +15,12 @@ import { upperFirst } from "lodash"; import React, { useCallback, ComponentType } from "react"; import { hot } from "react-hot-loader/root"; -import { SLabel, SDescription, SInput } from "./common"; import LaserScanSettingsEditor from "./LaserScanSettingsEditor"; import MarkerSettingsEditor from "./MarkerSettingsEditor"; import PointCloudSettingsEditor from "./PointCloudSettingsEditor"; import PoseSettingsEditor from "./PoseSettingsEditor"; import styles from "./TopicSettingsEditor.module.scss"; +import { SLabel, SDescription, SInput } from "./common"; import ErrorBoundary from "@foxglove-studio/app/components/ErrorBoundary"; import Flex from "@foxglove-studio/app/components/Flex"; import { Select, Option } from "@foxglove-studio/app/components/Select"; diff --git a/app/panels/ThreeDimensionalViz/TopicTree/Layout.stories.tsx b/app/panels/ThreeDimensionalViz/TopicTree/Layout.stories.tsx index 27aefc5b89d..16a712e21d4 100644 --- a/app/panels/ThreeDimensionalViz/TopicTree/Layout.stories.tsx +++ b/app/panels/ThreeDimensionalViz/TopicTree/Layout.stories.tsx @@ -13,9 +13,9 @@ import { storiesOf } from "@storybook/react"; import React, { useState } from "react"; -import delay from "@foxglove-studio/app/shared/delay"; import Flex from "@foxglove-studio/app/components/Flex"; import ThreeDimensionalViz from "@foxglove-studio/app/panels/ThreeDimensionalViz"; +import delay from "@foxglove-studio/app/shared/delay"; import PanelSetup from "@foxglove-studio/app/stories/PanelSetup"; import { SExpectedResult } from "@foxglove-studio/app/stories/storyHelpers"; diff --git a/app/panels/ThreeDimensionalViz/TopicTree/Layout.tsx b/app/panels/ThreeDimensionalViz/TopicTree/Layout.tsx index af79f757132..e2505106a87 100644 --- a/app/panels/ThreeDimensionalViz/TopicTree/Layout.tsx +++ b/app/panels/ThreeDimensionalViz/TopicTree/Layout.tsx @@ -11,7 +11,6 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import { groupBy } from "lodash"; import React, { useCallback, @@ -33,8 +32,10 @@ import { } from "regl-worldview"; import { Time } from "rosbag"; import { useDebouncedCallback } from "use-debounce"; +import { $Shape } from "utility-types"; import useTopicTree, { TopicTreeContext } from "./useTopicTree"; +import useDataSourceInfo from "@foxglove-studio/app/PanelAPI/useDataSourceInfo"; import Dimensions from "@foxglove-studio/app/components/Dimensions"; import { useExperimentalFeature } from "@foxglove-studio/app/components/ExperimentalFeatures"; import KeyListener from "@foxglove-studio/app/components/KeyListener"; @@ -44,7 +45,6 @@ import { RenderToBodyComponent } from "@foxglove-studio/app/components/renderToB import filterMap from "@foxglove-studio/app/filterMap"; import useGlobalVariables from "@foxglove-studio/app/hooks/useGlobalVariables"; import { getGlobalHooks } from "@foxglove-studio/app/loadWebviz"; -import useDataSourceInfo from "@foxglove-studio/app/PanelAPI/useDataSourceInfo"; import { Save3DConfig, ThreeDimensionalVizConfig, @@ -71,12 +71,6 @@ import { MarkerMatcher, ThreeDimensionalVizContext, } from "@foxglove-studio/app/panels/ThreeDimensionalViz/ThreeDimensionalVizContext"; -import { - TargetPose, - getInteractionData, - getObject, - getUpdatedGlobalVariablesBySelectedObject, -} from "@foxglove-studio/app/panels/ThreeDimensionalViz/threeDimensionalVizUtils"; import { ColorPickerSettingsPanel } from "@foxglove-studio/app/panels/ThreeDimensionalViz/TopicSettingsEditor/ColorPickerForTopicSettings"; import TopicSettingsModal from "@foxglove-studio/app/panels/ThreeDimensionalViz/TopicTree/TopicSettingsModal"; import TopicTree from "@foxglove-studio/app/panels/ThreeDimensionalViz/TopicTree/TopicTree"; @@ -85,6 +79,12 @@ import useSceneBuilderAndTransformsData from "@foxglove-studio/app/panels/ThreeD import Transforms from "@foxglove-studio/app/panels/ThreeDimensionalViz/Transforms"; import TransformsBuilder from "@foxglove-studio/app/panels/ThreeDimensionalViz/TransformsBuilder"; import World from "@foxglove-studio/app/panels/ThreeDimensionalViz/World"; +import { + TargetPose, + getInteractionData, + getObject, + getUpdatedGlobalVariablesBySelectedObject, +} from "@foxglove-studio/app/panels/ThreeDimensionalViz/threeDimensionalVizUtils"; import { Frame, Topic } from "@foxglove-studio/app/players/types"; import inScreenshotTests from "@foxglove-studio/app/stories/inScreenshotTests"; import { Color } from "@foxglove-studio/app/types/Messages"; @@ -704,7 +704,6 @@ export default function Layout({ const { isHovered } = useContext(PanelContext) || {}; const isDemoMode = useExperimentalFeature("demoMode"); const isHidden = isDemoMode && !isHovered; - const DemoModeComponent = getGlobalHooks().getDemoModeComponent(); const { MapComponent, videoRecordingStyle } = useMemo( () => ({ diff --git a/app/panels/ThreeDimensionalViz/TopicTree/TopicTree.tsx b/app/panels/ThreeDimensionalViz/TopicTree/TopicTree.tsx index ab783fdd346..c5b5863ef68 100644 --- a/app/panels/ThreeDimensionalViz/TopicTree/TopicTree.tsx +++ b/app/panels/ThreeDimensionalViz/TopicTree/TopicTree.tsx @@ -24,11 +24,11 @@ import styled from "styled-components"; import { Save3DConfig } from "../index"; import DiffModeSettings from "./DiffModeSettings"; -import NoMatchesSvg from "./noMatches.svg"; -import renderTreeNodes, { SWITCHER_WIDTH } from "./renderTreeNodes"; import TopicTreeSwitcher, { SWITCHER_HEIGHT } from "./TopicTreeSwitcher"; import TopicViewModeSelector from "./TopicViewModeSelector"; import { ROW_HEIGHT } from "./TreeNodeRow"; +import NoMatchesSvg from "./noMatches.svg"; +import renderTreeNodes, { SWITCHER_WIDTH } from "./renderTreeNodes"; import { DerivedCustomSettingsByKey, GetIsNamespaceCheckedByDefault, diff --git a/app/panels/ThreeDimensionalViz/TopicTree/TopicViewModeSelector.tsx b/app/panels/ThreeDimensionalViz/TopicTree/TopicViewModeSelector.tsx index e64221a622a..cb5b546aa7b 100644 --- a/app/panels/ThreeDimensionalViz/TopicTree/TopicViewModeSelector.tsx +++ b/app/panels/ThreeDimensionalViz/TopicTree/TopicViewModeSelector.tsx @@ -11,13 +11,12 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Keys } from "utility-types"; import React from "react"; import styled from "styled-components"; - -import Dropdown from "@foxglove-studio/app/components/Dropdown"; +import { $Keys } from "utility-types"; import { Save3DConfig } from ".."; +import Dropdown from "@foxglove-studio/app/components/Dropdown"; export const TOPIC_DISPLAY_MODES = { SHOW_ALL: { diff --git a/app/panels/ThreeDimensionalViz/TopicTree/TreeNodeRow.tsx b/app/panels/ThreeDimensionalViz/TopicTree/TreeNodeRow.tsx index acf53bbff81..4524187b25d 100644 --- a/app/panels/ThreeDimensionalViz/TopicTree/TreeNodeRow.tsx +++ b/app/panels/ThreeDimensionalViz/TopicTree/TreeNodeRow.tsx @@ -19,8 +19,8 @@ import styled from "styled-components"; import NodeName from "./NodeName"; import { TREE_SPACING } from "./TopicTree"; import TreeNodeMenu, { DOT_MENU_WIDTH } from "./TreeNodeMenu"; -import { DerivedCustomSettings, SetCurrentEditingTopic, TreeNode } from "./types"; import VisibilityToggle, { TOGGLE_WRAPPER_SIZE, TOPIC_ROW_PADDING } from "./VisibilityToggle"; +import { DerivedCustomSettings, SetCurrentEditingTopic, TreeNode } from "./types"; import Icon from "@foxglove-studio/app/components/Icon"; import Tooltip from "@foxglove-studio/app/components/Tooltip"; import { ThreeDimensionalVizContext } from "@foxglove-studio/app/panels/ThreeDimensionalViz/ThreeDimensionalVizContext"; diff --git a/app/panels/ThreeDimensionalViz/TopicTree/VisibilityToggle.tsx b/app/panels/ThreeDimensionalViz/TopicTree/VisibilityToggle.tsx index 1bde6e90a35..6e4a136e528 100644 --- a/app/panels/ThreeDimensionalViz/TopicTree/VisibilityToggle.tsx +++ b/app/panels/ThreeDimensionalViz/TopicTree/VisibilityToggle.tsx @@ -11,12 +11,12 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Keys } from "utility-types"; import BlockHelperIcon from "@mdi/svg/svg/block-helper.svg"; import React, { useCallback } from "react"; import { Color } from "regl-worldview"; import styled from "styled-components"; import tinyColor from "tinycolor2"; +import { $Keys } from "utility-types"; import { ROW_HEIGHT } from "./TreeNodeRow"; import Icon from "@foxglove-studio/app/components/Icon"; diff --git a/app/panels/ThreeDimensionalViz/TopicTree/renderNamespaceNodes.tsx b/app/panels/ThreeDimensionalViz/TopicTree/renderNamespaceNodes.tsx index f8fbf87ada0..323edf875b7 100644 --- a/app/panels/ThreeDimensionalViz/TopicTree/renderNamespaceNodes.tsx +++ b/app/panels/ThreeDimensionalViz/TopicTree/renderNamespaceNodes.tsx @@ -15,16 +15,16 @@ import React, { useCallback, useContext, useMemo } from "react"; import NamespaceMenu from "./NamespaceMenu"; import NodeName from "./NodeName"; -import { TooltipRow, TooltipTable, TreeUINode } from "./renderTreeNodes"; import { TREE_SPACING } from "./TopicTree"; import { SToggles, STreeNodeRow, SLeft, SRightActions, ICON_SIZE } from "./TreeNodeRow"; +import VisibilityToggle, { TOGGLE_WRAPPER_SIZE } from "./VisibilityToggle"; +import { TooltipRow, TooltipTable, TreeUINode } from "./renderTreeNodes"; import { GetIsTreeNodeVisibleInTree, OnNamespaceOverrideColorChange, SetEditingNamespace, TreeTopicNode, } from "./types"; -import VisibilityToggle, { TOGGLE_WRAPPER_SIZE } from "./VisibilityToggle"; import { ThreeDimensionalVizContext } from "@foxglove-studio/app/panels/ThreeDimensionalViz/ThreeDimensionalVizContext"; import { TopicTreeContext } from "@foxglove-studio/app/panels/ThreeDimensionalViz/TopicTree/useTopicTree"; import { SECOND_SOURCE_PREFIX, TRANSFORM_TOPIC } from "@foxglove-studio/app/util/globalConstants"; diff --git a/app/panels/ThreeDimensionalViz/TopicTree/renderStyleExpressionNodes.tsx b/app/panels/ThreeDimensionalViz/TopicTree/renderStyleExpressionNodes.tsx index 5d9f019a85c..b42ec4b0672 100644 --- a/app/panels/ThreeDimensionalViz/TopicTree/renderStyleExpressionNodes.tsx +++ b/app/panels/ThreeDimensionalViz/TopicTree/renderStyleExpressionNodes.tsx @@ -24,8 +24,8 @@ import ChildToggle from "@foxglove-studio/app/components/ChildToggle"; import Icon from "@foxglove-studio/app/components/Icon"; import Menu, { Item } from "@foxglove-studio/app/components/Menu"; import Modal from "@foxglove-studio/app/components/Modal"; -import { RenderToBodyComponent } from "@foxglove-studio/app/components/renderToBody"; import Tooltip from "@foxglove-studio/app/components/Tooltip"; +import { RenderToBodyComponent } from "@foxglove-studio/app/components/renderToBody"; import filterMap from "@foxglove-studio/app/filterMap"; import useGlobalVariables from "@foxglove-studio/app/hooks/useGlobalVariables"; import { getDefaultColorOverrideBySourceIdx } from "@foxglove-studio/app/panels/ThreeDimensionalViz/GlobalVariableStyles"; diff --git a/app/panels/ThreeDimensionalViz/TopicTree/renderTreeNodes.test.ts b/app/panels/ThreeDimensionalViz/TopicTree/renderTreeNodes.test.ts index 6cdb4f2796a..cc7fa01c850 100644 --- a/app/panels/ThreeDimensionalViz/TopicTree/renderTreeNodes.test.ts +++ b/app/panels/ThreeDimensionalViz/TopicTree/renderTreeNodes.test.ts @@ -10,8 +10,8 @@ // This source code is licensed under the Apache License, Version 2.0, // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { TreeNode } from "./types"; import { getNamespaceNodes } from "./renderTreeNodes"; +import { TreeNode } from "./types"; const TOPIC_NAME = "/foo"; const UNAVAILABLE_TOPIC_NAME = "/foo_unavailable"; diff --git a/app/panels/ThreeDimensionalViz/TopicTree/renderTreeNodes.tsx b/app/panels/ThreeDimensionalViz/TopicTree/renderTreeNodes.tsx index 5868588308c..7b98effbfea 100644 --- a/app/panels/ThreeDimensionalViz/TopicTree/renderTreeNodes.tsx +++ b/app/panels/ThreeDimensionalViz/TopicTree/renderTreeNodes.tsx @@ -15,9 +15,9 @@ import { uniq } from "lodash"; import React from "react"; import styled from "styled-components"; +import TreeNodeRow from "./TreeNodeRow"; import renderNamespaceNodes, { NamespaceNode } from "./renderNamespaceNodes"; import { renderStyleExpressionNodes } from "./renderStyleExpressionNodes"; -import TreeNodeRow from "./TreeNodeRow"; import { DerivedCustomSettingsByKey, GetIsNamespaceCheckedByDefault, diff --git a/app/panels/ThreeDimensionalViz/TopicTree/useTopicTree.test.tsx b/app/panels/ThreeDimensionalViz/TopicTree/useTopicTree.test.tsx index e1d59a6bbd5..a26e712e964 100644 --- a/app/panels/ThreeDimensionalViz/TopicTree/useTopicTree.test.tsx +++ b/app/panels/ThreeDimensionalViz/TopicTree/useTopicTree.test.tsx @@ -16,7 +16,6 @@ import * as React from "react"; import { UseTreeInput } from "./types"; import useTopicTree, { generateNodeKey, getBaseKey } from "./useTopicTree"; -import { TOPIC_DISPLAY_MODES } from "@foxglove-studio/app/panels/ThreeDimensionalViz/TopicTree/TopicViewModeSelector"; import { Topic } from "@foxglove-studio/app/players/types"; const TREE_CONFIG = { diff --git a/app/panels/ThreeDimensionalViz/World.tsx b/app/panels/ThreeDimensionalViz/World.tsx index 23d288146ed..b9bb6f6bd53 100644 --- a/app/panels/ThreeDimensionalViz/World.tsx +++ b/app/panels/ThreeDimensionalViz/World.tsx @@ -15,16 +15,16 @@ import React, { forwardRef } from "react"; import { Worldview, CameraState, MouseHandler, DEFAULT_CAMERA_STATE } from "regl-worldview"; import { getGlobalHooks } from "@foxglove-studio/app/loadWebviz"; -import { LAYER_INDEX_DEFAULT_BASE } from "@foxglove-studio/app/panels/ThreeDimensionalViz/constants"; import { WorldSearchTextProps, useGLText, } from "@foxglove-studio/app/panels/ThreeDimensionalViz/SearchText"; -import { withDiffMode } from "@foxglove-studio/app/panels/ThreeDimensionalViz/utils/diffModeUtils"; -import withHighlights from "@foxglove-studio/app/panels/ThreeDimensionalViz/withWorldMarkerHighlights"; import WorldMarkers, { InteractiveMarkersByType, } from "@foxglove-studio/app/panels/ThreeDimensionalViz/WorldMarkers"; +import { LAYER_INDEX_DEFAULT_BASE } from "@foxglove-studio/app/panels/ThreeDimensionalViz/constants"; +import { withDiffMode } from "@foxglove-studio/app/panels/ThreeDimensionalViz/utils/diffModeUtils"; +import withHighlights from "@foxglove-studio/app/panels/ThreeDimensionalViz/withWorldMarkerHighlights"; import inScreenshotTests from "@foxglove-studio/app/stories/inScreenshotTests"; import { MarkerCollector, MarkerProvider } from "@foxglove-studio/app/types/Scene"; diff --git a/app/panels/ThreeDimensionalViz/WorldMarkers.tsx b/app/panels/ThreeDimensionalViz/WorldMarkers.tsx index 895539a6019..3a937894260 100644 --- a/app/panels/ThreeDimensionalViz/WorldMarkers.tsx +++ b/app/panels/ThreeDimensionalViz/WorldMarkers.tsx @@ -31,6 +31,8 @@ import styled from "styled-components"; import glTextAtlasLoader, { TextAtlas } from "./utils/glTextAtlasLoader"; import { groupLinesIntoInstancedLineLists } from "./utils/groupingUtils"; import { getGlobalHooks } from "@foxglove-studio/app/loadWebviz"; +import { Interactive } from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/types"; +import { GLTextMarker } from "@foxglove-studio/app/panels/ThreeDimensionalViz/SearchText"; import { OccupancyGrids, LaserScans, @@ -42,8 +44,6 @@ import { LAYER_INDEX_TEXT, LAYER_INDEX_OCCUPANCY_GRIDS, } from "@foxglove-studio/app/panels/ThreeDimensionalViz/constants"; -import { Interactive } from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/types"; -import { GLTextMarker } from "@foxglove-studio/app/panels/ThreeDimensionalViz/SearchText"; import { BaseMarker, CubeListMarker, diff --git a/app/panels/ThreeDimensionalViz/commands/CarModel/index.tsx b/app/panels/ThreeDimensionalViz/commands/CarModel/index.tsx index a694549eac4..56b9308bc3f 100644 --- a/app/panels/ThreeDimensionalViz/commands/CarModel/index.tsx +++ b/app/panels/ThreeDimensionalViz/commands/CarModel/index.tsx @@ -14,8 +14,8 @@ import { vec3 } from "gl-matrix"; import React from "react"; import { GLTFScene, parseGLB, Pose, Scale, CommonCommandProps } from "regl-worldview"; -import carModelURL from "@foxglove-studio/app/panels/ThreeDimensionalViz/commands/CarModel/carModel.glb"; import { InteractionData } from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/types"; +import carModelURL from "@foxglove-studio/app/panels/ThreeDimensionalViz/commands/CarModel/carModel.glb"; async function loadCarModel() { const response = await fetch(carModelURL); diff --git a/app/panels/ThreeDimensionalViz/commands/PointClouds/VertexBufferCache.test.ts b/app/panels/ThreeDimensionalViz/commands/PointClouds/VertexBufferCache.test.ts index e49d2e50432..a559e3951f9 100644 --- a/app/panels/ThreeDimensionalViz/commands/PointClouds/VertexBufferCache.test.ts +++ b/app/panels/ThreeDimensionalViz/commands/PointClouds/VertexBufferCache.test.ts @@ -11,8 +11,8 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { VertexBuffer, MemoizedVertexBuffer } from "./types"; import VertexBufferCache from "./VertexBufferCache"; +import { VertexBuffer, MemoizedVertexBuffer } from "./types"; function reglBuffer(data: Float32Array) { const buffer: { diff --git a/app/panels/ThreeDimensionalViz/commands/PointClouds/buffers.ts b/app/panels/ThreeDimensionalViz/commands/PointClouds/buffers.ts index 917cbf46022..2165e5bdf0c 100644 --- a/app/panels/ThreeDimensionalViz/commands/PointClouds/buffers.ts +++ b/app/panels/ThreeDimensionalViz/commands/PointClouds/buffers.ts @@ -160,7 +160,7 @@ export function createPositionBuffer({ } // We cannot use positions as is from data buffer. Extract them. - console.info( + console.warn( `Vertex buffer stride will be too big (${stride}). Extracting positions from data in CPU`, ); return extractValues({ @@ -208,7 +208,7 @@ export function createColorBuffer({ }; } // stride is too big. Extract colors from data - console.info( + console.warn( `Vertex buffer stride will be too big (${ 4 * stride }). Extracting RGB colors from data in CPU`, @@ -249,7 +249,7 @@ export function createColorBuffer({ // Color datatype is not float or stride is too big // Just extract color data from buffer using CPU - console.info("Cannot reinterpret data. Extracting color buffer using CPU"); + console.warn("Cannot reinterpret data. Extracting color buffer using CPU"); return extractValues({ data, readers: [colorField.reader], diff --git a/app/panels/ThreeDimensionalViz/commands/PointClouds/decodeMarker.test.ts b/app/panels/ThreeDimensionalViz/commands/PointClouds/decodeMarker.test.ts index a773b5498d9..e7264f43c53 100644 --- a/app/panels/ThreeDimensionalViz/commands/PointClouds/decodeMarker.test.ts +++ b/app/panels/ThreeDimensionalViz/commands/PointClouds/decodeMarker.test.ts @@ -53,7 +53,6 @@ describe("", () => { }); it("extracts both positions from data since stride is not multiple of sizeof(float)", () => { - // $FlowFixMe - Flow doesn't like that we're overwriting this. console.info = () => { // memoizedMarker() will log warnings in console whenever a buffer cannot be sent to GPU }; @@ -150,7 +149,6 @@ describe("", () => { }); it("builds point cloud with rainbow colors. Extract both positions and colors", () => { - // $FlowFixMe - Flow doesn't like that we're overwriting this. console.info = () => { // memoizedMarker() will log warnings in console whenever a buffer cannot be sent to GPU }; @@ -202,7 +200,6 @@ describe("", () => { }); it("builds point cloud with gradient colors. Extract both positions and colors", () => { - // $FlowFixMe - Flow doesn't like that we're overwriting this. console.info = () => { // memoizedMarker() will log warnings in console whenever a buffer cannot be sent to GPU }; @@ -236,7 +233,6 @@ describe("", () => { describe("color field of different types", () => { // Colors are always extracted because of stride size const extractMarkerColors = (colorField: any) => { - // $FlowFixMe - Flow doesn't like that we're overwriting this. console.info = () => { // memoizedMarker() will log warnings in console whenever a buffer cannot be sent to GPU }; diff --git a/app/panels/ThreeDimensionalViz/commands/PointClouds/index.tsx b/app/panels/ThreeDimensionalViz/commands/PointClouds/index.tsx index 0c847aa498c..4695f3441dc 100644 --- a/app/panels/ThreeDimensionalViz/commands/PointClouds/index.tsx +++ b/app/panels/ThreeDimensionalViz/commands/PointClouds/index.tsx @@ -22,18 +22,18 @@ import { vec4ToRGBA, } from "regl-worldview"; +import VertexBufferCache from "./VertexBufferCache"; import { FLOAT_SIZE } from "./buffers"; import { decodeMarker } from "./decodeMarker"; import { updateMarkerCache } from "./memoization"; import { MemoizedMarker, MemoizedVertexBuffer, VertexBuffer } from "./types"; -import VertexBufferCache from "./VertexBufferCache"; import filterMap from "@foxglove-studio/app/filterMap"; -import { toRgba } from "@foxglove-studio/app/panels/ThreeDimensionalViz/commands/PointClouds/selection"; import { DEFAULT_FLAT_COLOR, DEFAULT_MIN_COLOR, DEFAULT_MAX_COLOR, } from "@foxglove-studio/app/panels/ThreeDimensionalViz/TopicSettingsEditor/PointCloudSettingsEditor"; +import { toRgba } from "@foxglove-studio/app/panels/ThreeDimensionalViz/commands/PointClouds/selection"; import { PointCloud } from "@foxglove-studio/app/types/Messages"; const COLOR_MODE_FLAT = 0; diff --git a/app/panels/ThreeDimensionalViz/commands/PointClouds/selection.test.ts b/app/panels/ThreeDimensionalViz/commands/PointClouds/selection.test.ts index bb6f8c2256b..d3c10679bd8 100644 --- a/app/panels/ThreeDimensionalViz/commands/PointClouds/selection.test.ts +++ b/app/panels/ThreeDimensionalViz/commands/PointClouds/selection.test.ts @@ -17,7 +17,6 @@ import { getClickedInfo, getAllPoints, decodeAdditionalFields } from "./selectio import { PointCloud2 } from "@foxglove-studio/app/types/Messages"; describe("", () => { - // $FlowFixMe - Flow doesn't like that we're overwriting this. console.info = () => { // decodeMarker() will log warnings in console whenever a buffer cannot be sent to GPU }; diff --git a/app/panels/ThreeDimensionalViz/commands/PoseMarkers.tsx b/app/panels/ThreeDimensionalViz/commands/PoseMarkers.tsx index 720dc2883d8..c5e8debace1 100644 --- a/app/panels/ThreeDimensionalViz/commands/PoseMarkers.tsx +++ b/app/panels/ThreeDimensionalViz/commands/PoseMarkers.tsx @@ -11,14 +11,13 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. import { vec3 } from "gl-matrix"; -import React, { ReactElement, ReactNode } from "react"; +import { ReactElement } from "react"; import { Arrows, FilledPolygons, pointToVec3, vec3ToPoint, orientationToVec4, - Arrow, CommonCommandProps, } from "regl-worldview"; diff --git a/app/panels/ThreeDimensionalViz/index.tsx b/app/panels/ThreeDimensionalViz/index.tsx index 9fd68c162e2..0eb5832da84 100644 --- a/app/panels/ThreeDimensionalViz/index.tsx +++ b/app/panels/ThreeDimensionalViz/index.tsx @@ -11,30 +11,29 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import hoistNonReactStatics from "hoist-non-react-statics"; import { omit, debounce } from "lodash"; import React, { useCallback, useMemo, useState, useRef, useEffect } from "react"; import { hot } from "react-hot-loader/root"; import { CameraState } from "regl-worldview"; +import { $Shape } from "utility-types"; import { FrameCompatibilityDEPRECATED } from "./FrameCompatibility"; import { useMessagePipeline } from "@foxglove-studio/app/components/MessagePipeline"; import Panel from "@foxglove-studio/app/components/Panel"; import PanelContext from "@foxglove-studio/app/components/PanelContext"; import { getGlobalHooks } from "@foxglove-studio/app/loadWebviz"; -import helpContent from "@foxglove-studio/app/panels/ThreeDimensionalViz/index.help.md"; import { TopicSettingsCollection } from "@foxglove-studio/app/panels/ThreeDimensionalViz/SceneBuilder"; -import { - useTransformedCameraState, - getNewCameraStateOnFollowChange, -} from "@foxglove-studio/app/panels/ThreeDimensionalViz/threeDimensionalVizUtils"; import Layout, { ColorOverrideBySourceIdxByVariable, } from "@foxglove-studio/app/panels/ThreeDimensionalViz/TopicTree/Layout"; - import { TopicDisplayMode } from "@foxglove-studio/app/panels/ThreeDimensionalViz/TopicTree/TopicViewModeSelector"; import Transforms from "@foxglove-studio/app/panels/ThreeDimensionalViz/Transforms"; +import helpContent from "@foxglove-studio/app/panels/ThreeDimensionalViz/index.help.md"; +import { + useTransformedCameraState, + getNewCameraStateOnFollowChange, +} from "@foxglove-studio/app/panels/ThreeDimensionalViz/threeDimensionalVizUtils"; import withTransforms from "@foxglove-studio/app/panels/ThreeDimensionalViz/withTransforms"; import { Frame, Topic } from "@foxglove-studio/app/players/types"; import { SaveConfig } from "@foxglove-studio/app/types/panels"; diff --git a/app/panels/ThreeDimensionalViz/logger.ts b/app/panels/ThreeDimensionalViz/logger.ts index 099bb6704ed..1f37ca5e6d6 100644 --- a/app/panels/ThreeDimensionalViz/logger.ts +++ b/app/panels/ThreeDimensionalViz/logger.ts @@ -14,6 +14,7 @@ import { throttle } from "lodash"; const DELAY = 1000; +/* eslint-disable no-restricted-syntax */ const warn = throttle((...args: any[]) => console.warn(...args), DELAY); const error = throttle((...args: any[]) => console.error(...args), DELAY); const info = throttle((...args: any[]) => console.info(...args), DELAY); diff --git a/app/panels/ThreeDimensionalViz/stories/MarkerStory.tsx b/app/panels/ThreeDimensionalViz/stories/MarkerStory.tsx index 7267f4fdb3f..e6e1c65e500 100644 --- a/app/panels/ThreeDimensionalViz/stories/MarkerStory.tsx +++ b/app/panels/ThreeDimensionalViz/stories/MarkerStory.tsx @@ -11,10 +11,10 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import { cloneDeep } from "lodash"; import React from "react"; import { Color } from "regl-worldview"; +import { $Shape } from "utility-types"; import { ThreeDimensionalVizConfig } from "@foxglove-studio/app/panels/ThreeDimensionalViz"; import { diff --git a/app/panels/ThreeDimensionalViz/stories/storyComponents.tsx b/app/panels/ThreeDimensionalViz/stories/storyComponents.tsx index a8365282632..7708f07dca9 100644 --- a/app/panels/ThreeDimensionalViz/stories/storyComponents.tsx +++ b/app/panels/ThreeDimensionalViz/stories/storyComponents.tsx @@ -11,13 +11,12 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import { createMemoryHistory } from "history"; import { uniq } from "lodash"; import * as React from "react"; import { Worldview } from "regl-worldview"; +import { $Shape } from "utility-types"; -import delay from "@foxglove-studio/app/shared/delay"; import { selectAllPanelIds } from "@foxglove-studio/app/actions/mosaic"; import Flex from "@foxglove-studio/app/components/Flex"; import PanelLayout from "@foxglove-studio/app/components/PanelLayout"; @@ -26,15 +25,16 @@ import GlobalVariableSliderPanel from "@foxglove-studio/app/panels/GlobalVariabl import ThreeDimensionalViz, { ThreeDimensionalVizConfig, } from "@foxglove-studio/app/panels/ThreeDimensionalViz"; -import { Store } from "@foxglove-studio/app/types/Store"; import { Frame, Topic } from "@foxglove-studio/app/players/types"; import createRootReducer from "@foxglove-studio/app/reducers"; +import delay from "@foxglove-studio/app/shared/delay"; import configureStore from "@foxglove-studio/app/store/configureStore"; -import inScreenshotTests from "@foxglove-studio/app/stories/inScreenshotTests"; import PanelSetup, { Fixture } from "@foxglove-studio/app/stories/PanelSetup"; import PanelSetupWithBag from "@foxglove-studio/app/stories/PanelSetupWithBag"; +import inScreenshotTests from "@foxglove-studio/app/stories/inScreenshotTests"; import { ScreenshotSizedContainer } from "@foxglove-studio/app/stories/storyHelpers"; import { createRosDatatypesFromFrame } from "@foxglove-studio/app/test/datatypes"; +import { Store } from "@foxglove-studio/app/types/Store"; import { objectValues } from "@foxglove-studio/app/util"; import { isBobject, wrapJsObject } from "@foxglove-studio/app/util/binaryObjects"; diff --git a/app/panels/ThreeDimensionalViz/threeDimensionalVizUtils.ts b/app/panels/ThreeDimensionalViz/threeDimensionalVizUtils.ts index 590e7e66d2d..992db17b817 100644 --- a/app/panels/ThreeDimensionalViz/threeDimensionalVizUtils.ts +++ b/app/panels/ThreeDimensionalViz/threeDimensionalVizUtils.ts @@ -11,7 +11,6 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import { vec3 } from "gl-matrix"; // eslint-disable-next-line no-restricted-imports import { mergeWith, get } from "lodash"; @@ -24,13 +23,14 @@ import { cameraStateSelectors, DEFAULT_CAMERA_STATE, } from "regl-worldview"; +import { $Shape } from "utility-types"; import { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; import { InteractionData } from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/types"; import { LinkedGlobalVariables } from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/useLinkedGlobalVariables"; import Transforms from "@foxglove-studio/app/panels/ThreeDimensionalViz/Transforms"; -import { isBobject, deepParse } from "@foxglove-studio/app/util/binaryObjects"; import { emptyPose } from "@foxglove-studio/app/util/Pose"; +import { isBobject, deepParse } from "@foxglove-studio/app/util/binaryObjects"; export type TargetPose = { target: Vec3; targetOrientation: Vec4 }; diff --git a/app/panels/ThreeDimensionalViz/utils/diffModeUtils.tsx b/app/panels/ThreeDimensionalViz/utils/diffModeUtils.tsx index 09f1ff9effe..a7254642e8d 100644 --- a/app/panels/ThreeDimensionalViz/utils/diffModeUtils.tsx +++ b/app/panels/ThreeDimensionalViz/utils/diffModeUtils.tsx @@ -15,11 +15,11 @@ import { partition } from "lodash"; import React, { ComponentType } from "react"; import { vec4ToRGBA } from "regl-worldview"; -import { LAYER_INDEX_DIFF_MODE_BASE_PER_PASS } from "@foxglove-studio/app/panels/ThreeDimensionalViz/constants"; import { InteractiveMarkersByType, WorldMarkerProps, } from "@foxglove-studio/app/panels/ThreeDimensionalViz/WorldMarkers"; +import { LAYER_INDEX_DIFF_MODE_BASE_PER_PASS } from "@foxglove-studio/app/panels/ThreeDimensionalViz/constants"; import { SECOND_SOURCE_PREFIX } from "@foxglove-studio/app/util/globalConstants"; export const BASE_COLOR = [0.5, 0.5, 0.5, 1.0]; diff --git a/app/panels/ThreeDimensionalViz/utils/glTextAtlasLoader.ts b/app/panels/ThreeDimensionalViz/utils/glTextAtlasLoader.ts index f6a4395cbbc..b3f313ee084 100644 --- a/app/panels/ThreeDimensionalViz/utils/glTextAtlasLoader.ts +++ b/app/panels/ThreeDimensionalViz/utils/glTextAtlasLoader.ts @@ -20,7 +20,6 @@ import { memoize } from "lodash"; // hardcoded alphabet that Webviz uses. import textAtlas from "./textAtlas.json"; - import glTextAtlasUrl from "./textureAtlasData.bin"; const errorMessage = "Error fetching /textureAtlasData for GLText, generating it client-side"; diff --git a/app/panels/ThreeDimensionalViz/utils/groupingUtils.test.ts b/app/panels/ThreeDimensionalViz/utils/groupingUtils.test.ts index c8055493927..5f8b0e83b3f 100644 --- a/app/panels/ThreeDimensionalViz/utils/groupingUtils.test.ts +++ b/app/panels/ThreeDimensionalViz/utils/groupingUtils.test.ts @@ -13,8 +13,8 @@ import { groupLinesIntoInstancedLineLists } from "./groupingUtils"; import { Color, Point, LineStripMarker, LineListMarker } from "@foxglove-studio/app/types/Messages"; -import { COLORS, MARKER_MSG_TYPES } from "@foxglove-studio/app/util/globalConstants"; import { emptyPose } from "@foxglove-studio/app/util/Pose"; +import { COLORS, MARKER_MSG_TYPES } from "@foxglove-studio/app/util/globalConstants"; const DUMMY_POINT_COLOR = { r: 0, g: 0, b: 0, a: 0 }; diff --git a/app/panels/ThreeDimensionalViz/utils/groupingUtils.ts b/app/panels/ThreeDimensionalViz/utils/groupingUtils.ts index 664cca647bc..58d846e13b3 100644 --- a/app/panels/ThreeDimensionalViz/utils/groupingUtils.ts +++ b/app/panels/ThreeDimensionalViz/utils/groupingUtils.ts @@ -18,8 +18,8 @@ import { LineStripMarker, InstancedLineListMarker, } from "@foxglove-studio/app/types/Messages"; -import { COLORS, MARKER_MSG_TYPES } from "@foxglove-studio/app/util/globalConstants"; import { emptyPose } from "@foxglove-studio/app/util/Pose"; +import { COLORS, MARKER_MSG_TYPES } from "@foxglove-studio/app/util/globalConstants"; // Group multiple line strip and line list markers into as few as possible. // This reduces the amount of draw calls required to render line them and increases performance. diff --git a/app/panels/ThreeDimensionalViz/withTransforms.tsx b/app/panels/ThreeDimensionalViz/withTransforms.tsx index 2e1028ff5df..aa26e163898 100644 --- a/app/panels/ThreeDimensionalViz/withTransforms.tsx +++ b/app/panels/ThreeDimensionalViz/withTransforms.tsx @@ -11,10 +11,10 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import hoistNonReactStatics from "hoist-non-react-statics"; import PropTypes from "prop-types"; import * as React from "react"; +import { $Shape } from "utility-types"; import { getGlobalHooks } from "../../loadWebviz"; import Transforms from "@foxglove-studio/app/panels/ThreeDimensionalViz/Transforms"; diff --git a/app/panels/ThreeDimensionalViz/withWorldMarkerHighlights.tsx b/app/panels/ThreeDimensionalViz/withWorldMarkerHighlights.tsx index 240210db4ea..3906ad6390e 100644 --- a/app/panels/ThreeDimensionalViz/withWorldMarkerHighlights.tsx +++ b/app/panels/ThreeDimensionalViz/withWorldMarkerHighlights.tsx @@ -14,12 +14,12 @@ import { partition } from "lodash"; import React, { ComponentType } from "react"; +import { WorldMarkerProps } from "@foxglove-studio/app/panels/ThreeDimensionalViz/WorldMarkers"; import Cover from "@foxglove-studio/app/panels/ThreeDimensionalViz/commands/Cover"; import { LAYER_INDEX_HIGHLIGHT_OVERLAY, LAYER_INDEX_HIGHLIGHT_BASE, } from "@foxglove-studio/app/panels/ThreeDimensionalViz/constants"; -import { WorldMarkerProps } from "@foxglove-studio/app/panels/ThreeDimensionalViz/WorldMarkers"; const withHighlights = (BaseWorldMarkers: ComponentType) => { const WorldMarkersWithHighlights = (props: WorldMarkerProps) => { diff --git a/app/panels/TwoDimensionalPlot/index.tsx b/app/panels/TwoDimensionalPlot/index.tsx index ac553c47c0f..56b93f0532a 100644 --- a/app/panels/TwoDimensionalPlot/index.tsx +++ b/app/panels/TwoDimensionalPlot/index.tsx @@ -11,19 +11,15 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import { flatten, pick, round, uniq } from "lodash"; import * as React from "react"; import DocumentEvents from "react-document-events"; import ReactDOM from "react-dom"; import { hot } from "react-hot-loader/root"; import styled from "styled-components"; +import { $Shape } from "utility-types"; import helpContent from "./index.help.md"; -import { - PanelToolbarLabel, - PanelToolbarInput, -} from "@foxglove-studio/app/shared/panelToolbarStyles"; import Button from "@foxglove-studio/app/components/Button"; import Dimensions from "@foxglove-studio/app/components/Dimensions"; import EmptyState from "@foxglove-studio/app/components/EmptyState"; @@ -38,6 +34,10 @@ import ChartComponent, { HoveredElement } from "@foxglove-studio/app/components/ import { ScaleBounds } from "@foxglove-studio/app/components/ReactChartjs/zoomAndPanHelpers"; import Tooltip from "@foxglove-studio/app/components/Tooltip"; import { cast } from "@foxglove-studio/app/players/types"; +import { + PanelToolbarLabel, + PanelToolbarInput, +} from "@foxglove-studio/app/shared/panelToolbarStyles"; import { deepParse, isBobject } from "@foxglove-studio/app/util/binaryObjects"; import { useDeepChangeDetector } from "@foxglove-studio/app/util/hooks"; import { colors, ROBOTO_MONO } from "@foxglove-studio/app/util/sharedStyleConstants"; diff --git a/app/panels/diagnostics/DiagnosticStatus.tsx b/app/panels/diagnostics/DiagnosticStatus.tsx index efbe3779be2..21e7791baf4 100644 --- a/app/panels/diagnostics/DiagnosticStatus.tsx +++ b/app/panels/diagnostics/DiagnosticStatus.tsx @@ -11,7 +11,6 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import ChartLineVariantIcon from "@mdi/svg/svg/chart-line-variant.svg"; import DotsHorizontalIcon from "@mdi/svg/svg/dots-horizontal.svg"; import ChevronDownIcon from "@mdi/svg/svg/unfold-less-horizontal.svg"; @@ -22,15 +21,16 @@ import * as React from "react"; import { createSelector } from "reselect"; import sanitizeHtml from "sanitize-html"; import styled from "styled-components"; +import { $Shape } from "utility-types"; import style from "./DiagnosticStatus.module.scss"; import { LEVEL_NAMES, DiagnosticInfo, KeyValue, DiagnosticStatusMessage } from "./util"; import Flex from "@foxglove-studio/app/components/Flex"; import Icon from "@foxglove-studio/app/components/Icon"; import Tooltip from "@foxglove-studio/app/components/Tooltip"; -import { Config } from "@foxglove-studio/app/panels/diagnostics/DiagnosticStatusPanel"; import { openSiblingPlotPanel } from "@foxglove-studio/app/panels/Plot"; import { openSiblingStateTransitionsPanel } from "@foxglove-studio/app/panels/StateTransitions"; +import { Config } from "@foxglove-studio/app/panels/diagnostics/DiagnosticStatusPanel"; import colors from "@foxglove-studio/app/styles/colors.module.scss"; import { PanelConfig } from "@foxglove-studio/app/types/panels"; diff --git a/app/panels/diagnostics/DiagnosticStatusPanel.tsx b/app/panels/diagnostics/DiagnosticStatusPanel.tsx index a72ab453c30..04937f358c0 100644 --- a/app/panels/diagnostics/DiagnosticStatusPanel.tsx +++ b/app/panels/diagnostics/DiagnosticStatusPanel.tsx @@ -11,14 +11,14 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import { sortBy } from "lodash"; import * as React from "react"; import { hot } from "react-hot-loader/root"; +import { $Shape } from "utility-types"; -import DiagnosticsHistory, { DiagnosticAutocompleteEntry } from "./DiagnosticsHistory"; import DiagnosticStatus from "./DiagnosticStatus"; import helpContent from "./DiagnosticStatusPanel.help.md"; +import DiagnosticsHistory, { DiagnosticAutocompleteEntry } from "./DiagnosticsHistory"; import { getDisplayName, trimHardwareId } from "./util"; import Autocomplete from "@foxglove-studio/app/components/Autocomplete"; import EmptyState from "@foxglove-studio/app/components/EmptyState"; diff --git a/app/panels/diagnostics/DiagnosticSummary.tsx b/app/panels/diagnostics/DiagnosticSummary.tsx index cc8028e5957..e9bde097d6f 100644 --- a/app/panels/diagnostics/DiagnosticSummary.tsx +++ b/app/panels/diagnostics/DiagnosticSummary.tsx @@ -11,7 +11,6 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import CheckboxBlankOutlineIcon from "@mdi/svg/svg/checkbox-blank-outline.svg"; import CheckboxMarkedIcon from "@mdi/svg/svg/checkbox-marked.svg"; import PinIcon from "@mdi/svg/svg/pin.svg"; @@ -20,6 +19,7 @@ import { compact } from "lodash"; import * as React from "react"; import { hot } from "react-hot-loader/root"; import { List, AutoSizer } from "react-virtualized"; +import { $Shape } from "utility-types"; import { Config as DiagnosticStatusConfig } from "./DiagnosticStatusPanel"; import helpContent from "./DiagnosticSummary.help.md"; diff --git a/app/panels/diagnostics/DiagnosticsHistory.ts b/app/panels/diagnostics/DiagnosticsHistory.ts index e66824ec701..65dc55e987c 100644 --- a/app/panels/diagnostics/DiagnosticsHistory.ts +++ b/app/panels/diagnostics/DiagnosticsHistory.ts @@ -12,7 +12,6 @@ // You may not use this file except in compliance with the License. import { sortedIndexBy } from "lodash"; -import { ReactElement, ReactNode } from "react"; import { DiagnosticStatusArrayMsg, diff --git a/app/panels/diagnostics/util.ts b/app/panels/diagnostics/util.ts index dc01be5254a..a2bcababf02 100644 --- a/app/panels/diagnostics/util.ts +++ b/app/panels/diagnostics/util.ts @@ -11,9 +11,9 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Values } from "utility-types"; import { sortBy, truncate } from "lodash"; import { Time } from "rosbag"; +import { $Values } from "utility-types"; import { DiagnosticsBuffer } from "@foxglove-studio/app/panels/diagnostics/DiagnosticsHistory"; import { Header } from "@foxglove-studio/app/types/Messages"; diff --git a/app/players/NodePlayer.test.ts b/app/players/NodePlayer.test.ts index 5bec31277b7..904f44337e4 100644 --- a/app/players/NodePlayer.test.ts +++ b/app/players/NodePlayer.test.ts @@ -12,7 +12,7 @@ // You may not use this file except in compliance with the License. import NodePlayer from "./NodePlayer"; -import signal from "@foxglove-studio/app/shared/signal"; +import { NodeDefinition } from "./nodes"; import FakePlayer from "@foxglove-studio/app/components/MessagePipeline/FakePlayer"; import { SubscribePayload, @@ -20,8 +20,8 @@ import { BobjectMessage, PlayerState, } from "@foxglove-studio/app/players/types"; +import signal from "@foxglove-studio/app/shared/signal"; import { deepParse, wrapJsObject } from "@foxglove-studio/app/util/binaryObjects"; -import { NodeDefinition } from "./nodes"; const testMessageDefinition = { fields: [ diff --git a/app/players/NodePlayer.ts b/app/players/NodePlayer.ts index 2d7009324c3..2e7a7935dfe 100644 --- a/app/players/NodePlayer.ts +++ b/app/players/NodePlayer.ts @@ -14,6 +14,7 @@ import { partition, cloneDeep, uniqBy } from "lodash"; import microMemoize from "micro-memoize"; import { Time } from "rosbag"; +import filterMap from "@foxglove-studio/app/filterMap"; import { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; import { getGlobalHooks } from "@foxglove-studio/app/loadWebviz"; import { @@ -35,7 +36,6 @@ import { Topic, } from "@foxglove-studio/app/players/types"; import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; -import filterMap from "@foxglove-studio/app/filterMap"; export default class NodePlayer implements Player { _player: Player; diff --git a/app/players/OrderedStampPlayer.test.ts b/app/players/OrderedStampPlayer.test.ts index 95678fc74c9..bab6c292202 100644 --- a/app/players/OrderedStampPlayer.test.ts +++ b/app/players/OrderedStampPlayer.test.ts @@ -14,14 +14,14 @@ import { TimeUtil } from "rosbag"; import OrderedStampPlayer, { BUFFER_DURATION_SECS } from "./OrderedStampPlayer"; -import signal from "@foxglove-studio/app/shared/signal"; import FakePlayer from "@foxglove-studio/app/components/MessagePipeline/FakePlayer"; +import UserNodePlayer from "@foxglove-studio/app/players/UserNodePlayer"; import { PlayerCapabilities, PlayerState, PlayerStateActiveData, } from "@foxglove-studio/app/players/types"; -import UserNodePlayer from "@foxglove-studio/app/players/UserNodePlayer"; +import signal from "@foxglove-studio/app/shared/signal"; import { deepParse, wrapJsObject } from "@foxglove-studio/app/util/binaryObjects"; import { basicDatatypes } from "@foxglove-studio/app/util/datatypes"; import { fromSec, TimestampMethod } from "@foxglove-studio/app/util/time"; @@ -293,8 +293,8 @@ describe("OrderedStampPlayer", () => { const { player, fakePlayer } = makePlayers("receiveTime"); const state = await new Promise((resolve) => { - player.setListener(async (state) => { - resolve(state); + player.setListener(async (playerState) => { + resolve(playerState); }); }); jest.spyOn(fakePlayer, "seekPlayback"); diff --git a/app/players/OrderedStampPlayer.ts b/app/players/OrderedStampPlayer.ts index 1f7a017e24b..737cbaf1a77 100644 --- a/app/players/OrderedStampPlayer.ts +++ b/app/players/OrderedStampPlayer.ts @@ -15,6 +15,7 @@ import microMemoize from "micro-memoize"; import { Time, TimeUtil } from "rosbag"; import { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; +import UserNodePlayer from "@foxglove-studio/app/players/UserNodePlayer"; import { cast, AdvertisePayload, @@ -27,8 +28,8 @@ import { PlayerWarnings, Topic, } from "@foxglove-studio/app/players/types"; -import UserNodePlayer from "@foxglove-studio/app/players/UserNodePlayer"; import { BinaryStampedMessage } from "@foxglove-studio/app/types/BinaryMessages"; +import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; import { UserNodes } from "@foxglove-studio/app/types/panels"; import { deepParse } from "@foxglove-studio/app/util/binaryObjects"; import { @@ -38,7 +39,6 @@ import { maybeGetBobjectHeaderStamp, TimestampMethod, } from "@foxglove-studio/app/util/time"; -import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; // As a compromise between playback buffering required and correctness (as well as our ability to // play near the ends of bags), we assume messages' headers are always between 0s and 1s earlier diff --git a/app/players/RandomAccessPlayer.test.ts b/app/players/RandomAccessPlayer.test.ts index 0ef0bd848e3..867609e6790 100644 --- a/app/players/RandomAccessPlayer.test.ts +++ b/app/players/RandomAccessPlayer.test.ts @@ -20,8 +20,6 @@ import RandomAccessPlayer, { SEEK_START_DELAY_MS, } from "./RandomAccessPlayer"; import TestProvider from "./TestProvider"; -import delay from "@foxglove-studio/app/shared/delay"; -import signal from "@foxglove-studio/app/shared/signal"; import { GetMessagesResult, GetMessagesTopics } from "@foxglove-studio/app/dataProviders/types"; import { BobjectMessage, @@ -31,6 +29,8 @@ import { PlayerMetricsCollectorInterface, PlayerState, } from "@foxglove-studio/app/players/types"; +import delay from "@foxglove-studio/app/shared/delay"; +import signal from "@foxglove-studio/app/shared/signal"; import sendNotification from "@foxglove-studio/app/util/sendNotification"; import { fromNanoSec, getSeekToTime, SEEK_ON_START_NS } from "@foxglove-studio/app/util/time"; diff --git a/app/players/RandomAccessPlayer.ts b/app/players/RandomAccessPlayer.ts index 1f5c522df88..5c9378e3a64 100644 --- a/app/players/RandomAccessPlayer.ts +++ b/app/players/RandomAccessPlayer.ts @@ -14,7 +14,6 @@ import { isEqual, partition } from "lodash"; import { TimeUtil, Time } from "rosbag"; import uuid from "uuid"; -import delay from "@foxglove-studio/app/shared/delay"; import { rootGetDataProvider } from "@foxglove-studio/app/dataProviders/rootGetDataProvider"; import { DataProvider, @@ -38,6 +37,7 @@ import { ParsedMessageDefinitionsByTopic, NotifyPlayerManager, } from "@foxglove-studio/app/players/types"; +import delay from "@foxglove-studio/app/shared/delay"; import inScreenshotTests from "@foxglove-studio/app/stories/inScreenshotTests"; import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; import debouncePromise from "@foxglove-studio/app/util/debouncePromise"; diff --git a/app/players/RosbridgePlayer.test.ts b/app/players/RosbridgePlayer.test.ts index 188c027cece..e35d8e795a1 100644 --- a/app/players/RosbridgePlayer.test.ts +++ b/app/players/RosbridgePlayer.test.ts @@ -11,6 +11,7 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. +import RosbridgePlayer from "@foxglove-studio/app/players/RosbridgePlayer"; import { isBobject, deepParse } from "@foxglove-studio/app/util/binaryObjects"; const headerMessage = ({ seq, stamp: { sec, nsec }, frame_id }: any) => { @@ -109,8 +110,6 @@ const MockROSLIB = { jest.mock("roslib/build/roslib", () => MockROSLIB); (window as any).ROSLIB = MockROSLIB; -import RosbridgePlayer from "@foxglove-studio/app/players/RosbridgePlayer"; - describe("RosbridgePlayer", () => { let player: RosbridgePlayer; diff --git a/app/players/RosbridgePlayer.tsx b/app/players/RosbridgePlayer.tsx index 71cf40564b8..c6fe83a9656 100644 --- a/app/players/RosbridgePlayer.tsx +++ b/app/players/RosbridgePlayer.tsx @@ -13,10 +13,11 @@ import { isEqual, sortBy, partition } from "lodash"; import { MessageReader, Time, parseMessageDefinition } from "rosbag"; +import ROSLIB from "roslib/build/roslib"; import uuid from "uuid"; -import renderToBody from "@foxglove-studio/app/components/renderToBody"; import WssErrorModal from "@foxglove-studio/app/components/WssErrorModal"; +import renderToBody from "@foxglove-studio/app/components/renderToBody"; import { AdvertisePayload, BobjectMessage, @@ -39,8 +40,6 @@ import { getTopicsByTopicName } from "@foxglove-studio/app/util/selectors"; import sendNotification from "@foxglove-studio/app/util/sendNotification"; import { fromMillis, TimestampMethod } from "@foxglove-studio/app/util/time"; -import ROSLIB from "roslib/build/roslib"; - const capabilities = [PlayerCapabilities.advertise]; const NO_WARNINGS = Object.freeze({}); diff --git a/app/players/UserNodePlayer/index.test.ts b/app/players/UserNodePlayer/index.test.ts index 6b9af3bd320..ff0acf85bf5 100644 --- a/app/players/UserNodePlayer/index.test.ts +++ b/app/players/UserNodePlayer/index.test.ts @@ -13,11 +13,9 @@ // @ts-nocheck -import signal from "@foxglove-studio/app/shared/signal"; // @ts-expect-error flow imports have any type import FakePlayer from "@foxglove-studio/app/components/MessagePipeline/FakePlayer"; import NodePlayer from "@foxglove-studio/app/players/NodePlayer"; -import { SubscribePayload, Message, BobjectMessage } from "@foxglove-studio/app/players/types"; import UserNodePlayer from "@foxglove-studio/app/players/UserNodePlayer"; import exampleDatatypes from "@foxglove-studio/app/players/UserNodePlayer/nodeTransformerWorker/fixtures/example-datatypes.json"; import { @@ -26,12 +24,14 @@ import { ErrorCodes, } from "@foxglove-studio/app/players/UserNodePlayer/types"; import MockUserNodePlayerWorker from "@foxglove-studio/app/players/UserNodePlayer/worker.mock"; +import { SubscribePayload, Message, BobjectMessage } from "@foxglove-studio/app/players/types"; +import signal from "@foxglove-studio/app/shared/signal"; // @ts-expect-error flow imports have any type import { wrapMessages } from "@foxglove-studio/app/test/datatypes"; +import Storage from "@foxglove-studio/app/util/Storage"; import { deepParse } from "@foxglove-studio/app/util/binaryObjects"; import { basicDatatypes } from "@foxglove-studio/app/util/datatypes"; import { DEFAULT_WEBVIZ_NODE_PREFIX } from "@foxglove-studio/app/util/globalConstants"; -import Storage from "@foxglove-studio/app/util/Storage"; const storage = new Storage(); const nodeId = "nodeId"; diff --git a/app/players/UserNodePlayer/index.ts b/app/players/UserNodePlayer/index.ts index f8027fd9068..37b951320e4 100644 --- a/app/players/UserNodePlayer/index.ts +++ b/app/players/UserNodePlayer/index.ts @@ -13,32 +13,16 @@ import { isEqual, groupBy, partition } from "lodash"; import microMemoize from "micro-memoize"; import { TimeUtil, Time } from "rosbag"; -import uuid from "uuid"; // Filename of nodeTransformerWorker is recognized by the server, and given a special header to // ensure user-supplied code cannot make network requests. - import NodeDataWorker from "sharedworker-loader?name=nodeTransformerWorker-[hash].[ext]!@foxglove-studio/app/players/UserNodePlayer/nodeTransformerWorker"; // eslint-disable-line -import signal from "@foxglove-studio/app/shared/signal"; import { SetUserNodeDiagnostics, AddUserNodeLogs, SetUserNodeRosLib, } from "@foxglove-studio/app/actions/userNodes"; - -import UserNodePlayerWorker from "sharedworker-loader?name=nodeRuntimeWorker-[hash].[ext]!@foxglove-studio/app/players/UserNodePlayer/nodeRuntimeWorker"; // eslint-disable-line import { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; -import { - AdvertisePayload, - Message, - Player, - PlayerState, - PlayerStateActiveData, - PublishPayload, - SubscribePayload, - Topic, - BobjectMessage, -} from "@foxglove-studio/app/players/types"; import { Diagnostic, DiagnosticSeverity, @@ -51,14 +35,27 @@ import { UserNodeLog, } from "@foxglove-studio/app/players/UserNodePlayer/types"; import { hasTransformerErrors } from "@foxglove-studio/app/players/UserNodePlayer/utils"; -import { UserNode, UserNodes } from "@foxglove-studio/app/types/panels"; +import { + AdvertisePayload, + Message, + Player, + PlayerState, + PlayerStateActiveData, + PublishPayload, + SubscribePayload, + Topic, + BobjectMessage, +} from "@foxglove-studio/app/players/types"; +import signal from "@foxglove-studio/app/shared/signal"; +import UserNodePlayerWorker from "sharedworker-loader?name=nodeRuntimeWorker-[hash].[ext]!@foxglove-studio/app/players/UserNodePlayer/nodeRuntimeWorker"; // eslint-disable-line import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; +import { UserNode, UserNodes } from "@foxglove-studio/app/types/panels"; +import Rpc from "@foxglove-studio/app/util/Rpc"; +import { setupReceiveReportErrorHandler } from "@foxglove-studio/app/util/RpcMainThreadUtils"; import { wrapJsObject } from "@foxglove-studio/app/util/binaryObjects"; import { BobjectRpcSender } from "@foxglove-studio/app/util/binaryObjects/BobjectRpc"; import { basicDatatypes } from "@foxglove-studio/app/util/datatypes"; import { DEFAULT_WEBVIZ_NODE_PREFIX } from "@foxglove-studio/app/util/globalConstants"; -import Rpc from "@foxglove-studio/app/util/Rpc"; -import { setupReceiveReportErrorHandler } from "@foxglove-studio/app/util/RpcMainThreadUtils"; type UserNodeActions = { setUserNodeDiagnostics: SetUserNodeDiagnostics; diff --git a/app/players/UserNodePlayer/nodeRuntimeWorker/index.ts b/app/players/UserNodePlayer/nodeRuntimeWorker/index.ts index ba70cce978d..57f74b3d386 100644 --- a/app/players/UserNodePlayer/nodeRuntimeWorker/index.ts +++ b/app/players/UserNodePlayer/nodeRuntimeWorker/index.ts @@ -14,8 +14,8 @@ import { registerNode, processMessage, } from "@foxglove-studio/app/players/UserNodePlayer/nodeRuntimeWorker/registry"; -import { BobjectRpcReceiver } from "@foxglove-studio/app/util/binaryObjects/BobjectRpc"; import Rpc from "@foxglove-studio/app/util/Rpc"; +import { BobjectRpcReceiver } from "@foxglove-studio/app/util/binaryObjects/BobjectRpc"; import { enforceFetchIsBlocked, inSharedWorker } from "@foxglove-studio/app/util/workers"; if (!inSharedWorker()) { diff --git a/app/players/UserNodePlayer/nodeTransformerWorker/transformer.test.ts b/app/players/UserNodePlayer/nodeTransformerWorker/transformer.test.ts index 2eae44b446a..894cb88dea1 100644 --- a/app/players/UserNodePlayer/nodeTransformerWorker/transformer.test.ts +++ b/app/players/UserNodePlayer/nodeTransformerWorker/transformer.test.ts @@ -12,6 +12,7 @@ // You may not use this file except in compliance with the License. import { $Values } from "utility-types"; + import exampleDatatypes from "@foxglove-studio/app/players/UserNodePlayer/nodeTransformerWorker/fixtures/example-datatypes.json"; import { getOutputTopic, diff --git a/app/players/UserNodePlayer/nodeTransformerWorker/transformer.ts b/app/players/UserNodePlayer/nodeTransformerWorker/transformer.ts index 1c05bdf7935..58233646a17 100644 --- a/app/players/UserNodePlayer/nodeTransformerWorker/transformer.ts +++ b/app/players/UserNodePlayer/nodeTransformerWorker/transformer.ts @@ -13,7 +13,8 @@ // @ts-nocheck -import { Topic } from "@foxglove-studio/app/players/types"; +import ts from "typescript/lib/typescript"; + import { formatInterfaceName } from "@foxglove-studio/app/players/UserNodePlayer/nodeTransformerWorker/typegen"; import { constructDatatypes, @@ -34,12 +35,11 @@ import { Diagnostic, NodeDataTransformer, } from "@foxglove-studio/app/players/UserNodePlayer/types"; +import { Topic } from "@foxglove-studio/app/players/types"; import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; import { DEFAULT_WEBVIZ_NODE_PREFIX } from "@foxglove-studio/app/util/globalConstants"; import sendNotification from "@foxglove-studio/app/util/sendNotification"; -import ts from "typescript/lib/typescript"; - export const hasTransformerErrors = (nodeData: NodeData): boolean => nodeData.diagnostics.some(({ severity }) => severity === DiagnosticSeverity.Error); diff --git a/app/players/UserNodePlayer/nodeTransformerWorker/typegen.test.ts b/app/players/UserNodePlayer/nodeTransformerWorker/typegen.test.ts index ff4030bc1b4..f91819232ad 100644 --- a/app/players/UserNodePlayer/nodeTransformerWorker/typegen.test.ts +++ b/app/players/UserNodePlayer/nodeTransformerWorker/typegen.test.ts @@ -12,6 +12,8 @@ // You may not use this file except in compliance with the License. // Pulled from our open source demo bag: https://open-source-webviz-ui.s3.amazonaws.com/demo.bag +import ts from "typescript/lib/typescript"; + import stressTestDatatypes from "@foxglove-studio/app/players/UserNodePlayer/nodeTransformerWorker/fixtures/example-datatypes.json"; import { compile } from "@foxglove-studio/app/players/UserNodePlayer/nodeTransformerWorker/transformer"; import generateRosLib, { @@ -21,8 +23,6 @@ import generateRosLib, { } from "@foxglove-studio/app/players/UserNodePlayer/nodeTransformerWorker/typegen"; import { NodeData } from "@foxglove-studio/app/players/UserNodePlayer/types"; -import ts from "typescript/lib/typescript"; - const baseNodeData: NodeData = { name: "/webviz_node/main", sourceCode: "", diff --git a/app/players/UserNodePlayer/nodeTransformerWorker/typegen.ts b/app/players/UserNodePlayer/nodeTransformerWorker/typegen.ts index 374005cabd1..11e767ebda6 100644 --- a/app/players/UserNodePlayer/nodeTransformerWorker/typegen.ts +++ b/app/players/UserNodePlayer/nodeTransformerWorker/typegen.ts @@ -13,11 +13,11 @@ // @ts-nocheck +import ts from "typescript/lib/typescript"; + import { Topic } from "@foxglove-studio/app/players/types"; import { RosDatatypes, RosDatatype } from "@foxglove-studio/app/types/RosDatatypes"; -import ts from "typescript/lib/typescript"; - export type InterfaceDeclarations = { [datatype: string]: ts.InterfaceDeclaration; }; diff --git a/app/players/UserNodePlayer/nodeTransformerWorker/typescript/ast.ts b/app/players/UserNodePlayer/nodeTransformerWorker/typescript/ast.ts index 703156ab65a..ff810b475fc 100644 --- a/app/players/UserNodePlayer/nodeTransformerWorker/typescript/ast.ts +++ b/app/players/UserNodePlayer/nodeTransformerWorker/typescript/ast.ts @@ -15,6 +15,7 @@ import { without } from "lodash"; import type { RosMsgField } from "rosbag"; +import ts from "typescript/lib/typescript"; import baseDatatypes from "@foxglove-studio/app/players/UserNodePlayer/nodeTransformerWorker/typescript/baseDatatypes"; import { @@ -41,8 +42,6 @@ import { } from "@foxglove-studio/app/players/UserNodePlayer/types"; import type { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; -import ts from "typescript/lib/typescript"; - type TypeParam = { parent: TypeParam; current: ts.TypeParameterDeclaration | ts.TypeNode; diff --git a/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/pointClouds.test.ts b/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/pointClouds.test.ts index accf3f84ee6..d23a1cb6a4c 100644 --- a/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/pointClouds.test.ts +++ b/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/pointClouds.test.ts @@ -1,4 +1,7 @@ -import { POINT_CLOUD_MESSAGE, POINT_CLOUD_WITH_ADDITIONAL_FIELDS } from "./fixtures/pointCloudMessage"; +import { + POINT_CLOUD_MESSAGE, + POINT_CLOUD_WITH_ADDITIONAL_FIELDS, +} from "./fixtures/pointCloudMessage"; import { readPoints } from "./pointClouds"; describe("pointClouds", () => { @@ -9,7 +12,10 @@ describe("pointClouds", () => { ]); }); it("reads points from a point cloud", () => { - expect(readPoints(POINT_CLOUD_WITH_ADDITIONAL_FIELDS)).toEqual([[0, 1, 2, 7, 6, 5, 265], [0, 1, 2, 9, 8, 7, 2]]); + expect(readPoints(POINT_CLOUD_WITH_ADDITIONAL_FIELDS)).toEqual([ + [0, 1, 2, 7, 6, 5, 265], + [0, 1, 2, 9, 8, 7, 2], + ]); }); }); }); diff --git a/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/pointClouds.ts b/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/pointClouds.ts index 750bd7fca32..eabf1feb4d2 100644 --- a/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/pointClouds.ts +++ b/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/pointClouds.ts @@ -1,6 +1,5 @@ -import { Point, Header, RGBA } from "./types"; -import { rotate } from "./vectors"; import { FieldReader, getReader } from "./readers"; +import { Point, Header, RGBA } from "./types"; interface sensor_msgs__PointField { name: string; @@ -25,7 +24,7 @@ type Reader = { datatype: number; offset: number; reader: FieldReader }; function getFieldOffsetsAndReaders(fields: sensor_msgs__PointField[]): Reader[] { const result: Reader[] = []; - for (const { name, datatype, offset = 0 } of fields) { + for (const { datatype, offset = 0 } of fields) { result.push({ datatype, offset, reader: getReader(datatype, offset) }); } return result; diff --git a/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/time.test.ts b/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/time.test.ts index d8e37b1f547..3fff728ba70 100644 --- a/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/time.test.ts +++ b/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/time.test.ts @@ -4,10 +4,22 @@ describe("time", () => { it("subtractTimes", () => { expect(subtractTimes({ sec: 1, nsec: 1 }, { sec: 1, nsec: 1 })).toEqual({ sec: 0, nsec: 0 }); expect(subtractTimes({ sec: 1, nsec: 2 }, { sec: 2, nsec: 1 })).toEqual({ sec: -1, nsec: 1 }); - expect(subtractTimes({ sec: 5, nsec: 100 }, { sec: 2, nsec: 10 })).toEqual({ sec: 3, nsec: 90 }); - expect(subtractTimes({ sec: 1, nsec: 1e8 }, { sec: 0, nsec: 5e8 })).toEqual({ sec: 0, nsec: 600000000 }); - expect(subtractTimes({ sec: 1, nsec: 0 }, { sec: 0, nsec: 1e9 - 1 })).toEqual({ sec: 0, nsec: 1 }); - expect(subtractTimes({ sec: 0, nsec: 0 }, { sec: 0, nsec: 1 })).toEqual({ sec: -1, nsec: 1e9 - 1 }); + expect(subtractTimes({ sec: 5, nsec: 100 }, { sec: 2, nsec: 10 })).toEqual({ + sec: 3, + nsec: 90, + }); + expect(subtractTimes({ sec: 1, nsec: 1e8 }, { sec: 0, nsec: 5e8 })).toEqual({ + sec: 0, + nsec: 600000000, + }); + expect(subtractTimes({ sec: 1, nsec: 0 }, { sec: 0, nsec: 1e9 - 1 })).toEqual({ + sec: 0, + nsec: 1, + }); + expect(subtractTimes({ sec: 0, nsec: 0 }, { sec: 0, nsec: 1 })).toEqual({ + sec: -1, + nsec: 1e9 - 1, + }); }); it("compare", () => { expect(compare({ sec: 2, nsec: 1 }, { sec: 1, nsec: 1 })).toEqual(1); diff --git a/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/time.ts b/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/time.ts index 3c158371459..d79de19dc9a 100644 --- a/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/time.ts +++ b/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/time.ts @@ -30,6 +30,9 @@ const fixTime = (t: Time): Time => { return { sec, nsec }; }; -export const subtractTimes = ({ sec: sec1, nsec: nsec1 }: Time, { sec: sec2, nsec: nsec2 }: Time): Time => { +export const subtractTimes = ( + { sec: sec1, nsec: nsec1 }: Time, + { sec: sec2, nsec: nsec2 }: Time, +): Time => { return fixTime({ sec: sec1 - sec2, nsec: nsec1 - nsec2 }); }; diff --git a/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/vectors.test.ts b/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/vectors.test.ts index ae1fa6b71a6..c0003f3ebf6 100644 --- a/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/vectors.test.ts +++ b/app/players/UserNodePlayer/nodeTransformerWorker/typescript/userUtils/vectors.test.ts @@ -8,7 +8,12 @@ describe("vectors", () => { expect(cross([1, 2, 3], [3, 2, 1])).toEqual([-4, 8, -4]); }); it("vectorAddition", () => { - expect(vectorAddition([[1, 1, 1], [1, 1, 1]])).toEqual([2, 2, 2]); + expect( + vectorAddition([ + [1, 1, 1], + [1, 1, 1], + ]), + ).toEqual([2, 2, 2]); }); it("rotate", () => { expect(rotate({ x: 1, y: 1, z: 1, w: 1 }, { x: 1, y: 1, z: 1 })).toEqual({ diff --git a/app/players/UserNodePlayer/nodeTransformerWorker/utils.ts b/app/players/UserNodePlayer/nodeTransformerWorker/utils.ts index d8c1237aee6..98fb0264dbc 100644 --- a/app/players/UserNodePlayer/nodeTransformerWorker/utils.ts +++ b/app/players/UserNodePlayer/nodeTransformerWorker/utils.ts @@ -11,10 +11,10 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. +import ts from "typescript/lib/typescript"; import { $Values } from "utility-types"; -import { DiagnosticSeverity, Diagnostic } from "@foxglove-studio/app/players/UserNodePlayer/types"; -import ts from "typescript/lib/typescript"; +import { DiagnosticSeverity, Diagnostic } from "@foxglove-studio/app/players/UserNodePlayer/types"; const mapCategoryToDiagnosticSeverity = ( category: ts.DiagnosticCategory, diff --git a/app/players/UserNodePlayer/types.ts b/app/players/UserNodePlayer/types.ts index fa3e4d72449..17701b38862 100644 --- a/app/players/UserNodePlayer/types.ts +++ b/app/players/UserNodePlayer/types.ts @@ -10,6 +10,7 @@ // This source code is licensed under the Apache License, Version 2.0, // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. +import type { SourceFile, TypeChecker } from "typescript"; import { $Values } from "utility-types"; import { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; @@ -17,7 +18,6 @@ import { Topic, Message } from "@foxglove-studio/app/players/types"; import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; // make sure to use import type to avoid bringing in the actual implementations to the bundle -import type { SourceFile, TypeChecker } from "typescript"; export const DiagnosticSeverity = { Hint: 1, diff --git a/app/players/UserNodePlayer/worker.mock.ts b/app/players/UserNodePlayer/worker.mock.ts index 80427e839d2..45d3bb4e784 100644 --- a/app/players/UserNodePlayer/worker.mock.ts +++ b/app/players/UserNodePlayer/worker.mock.ts @@ -19,8 +19,8 @@ import { } from "@foxglove-studio/app/players/UserNodePlayer/nodeRuntimeWorker/registry"; import transform from "@foxglove-studio/app/players/UserNodePlayer/nodeTransformerWorker/transformer"; import generateRosLib from "@foxglove-studio/app/players/UserNodePlayer/nodeTransformerWorker/typegen"; -import { BobjectRpcReceiver } from "@foxglove-studio/app/util/binaryObjects/BobjectRpc"; import Rpc, { Channel, createLinkedChannels } from "@foxglove-studio/app/util/Rpc"; +import { BobjectRpcReceiver } from "@foxglove-studio/app/util/binaryObjects/BobjectRpc"; const validateWorkerArgs = (arg: any) => { expect(arg).not.toBeInstanceOf(Function); diff --git a/app/players/automatedRun/AutomatedRunPlayer.test.ts b/app/players/automatedRun/AutomatedRunPlayer.test.ts index 1227855a1db..c60041761c3 100644 --- a/app/players/automatedRun/AutomatedRunPlayer.test.ts +++ b/app/players/automatedRun/AutomatedRunPlayer.test.ts @@ -16,9 +16,9 @@ import AutomatedRunPlayer, { AutomatedRunClient, AUTOMATED_RUN_START_DELAY, } from "./AutomatedRunPlayer"; +import { Progress } from "@foxglove-studio/app/players/types"; import delay from "@foxglove-studio/app/shared/delay"; import signal from "@foxglove-studio/app/shared/signal"; -import { Progress } from "@foxglove-studio/app/players/types"; class TestRunClient implements AutomatedRunClient { speed = 1; diff --git a/app/players/automatedRun/AutomatedRunPlayer.ts b/app/players/automatedRun/AutomatedRunPlayer.ts index ec25ee82e22..7402aef935f 100644 --- a/app/players/automatedRun/AutomatedRunPlayer.ts +++ b/app/players/automatedRun/AutomatedRunPlayer.ts @@ -33,6 +33,7 @@ import { SubscribePayload, Topic, } from "@foxglove-studio/app/players/types"; +import Logger from "@foxglove-studio/app/util/Logger"; import { USER_ERROR_PREFIX } from "@foxglove-studio/app/util/globalConstants"; import { getSanitizedTopics } from "@foxglove-studio/app/util/selectors"; import sendNotification, { @@ -44,6 +45,8 @@ import sendNotification, { } from "@foxglove-studio/app/util/sendNotification"; import { clampTime, subtractTimes, toMillis } from "@foxglove-studio/app/util/time"; +const logger = new Logger("AutomatedRunPlayer"); + export interface AutomatedRunClient { speed: number; msPerFrame: number; @@ -351,7 +354,7 @@ export default class AutomatedRunPlayer implements Player { this._isPlaying = true; this._client.markPreloadEnd(); - console.log("AutomatedRunPlayer._run()"); + logger.info("AutomatedRunPlayer._run()"); await this._emitState([], [], this._providerResult.start); let currentTime = this._providerResult.start; @@ -399,7 +402,7 @@ export default class AutomatedRunPlayer implements Player { /* 24 hours */ ), ); - console.log( + logger.info( `[${workerIndex}/${workerCount}] Recording ${(percentComplete * 100).toFixed( 1, )}% done. ETA: ${eta}. Frame took ${frameRenderDurationMs}ms`, @@ -413,7 +416,7 @@ export default class AutomatedRunPlayer implements Player { await this._client.finish(); const totalDuration = (Date.now() - startEpoch) / 1000; - console.log(`AutomatedRunPlayer finished in ${formatSeconds(totalDuration)}`); + logger.info(`AutomatedRunPlayer finished in ${formatSeconds(totalDuration)}`); } /* Public API shared functions */ diff --git a/app/players/automatedRun/videoRecordingClient.ts b/app/players/automatedRun/videoRecordingClient.ts index d5fd79e3ed1..7d64d925e46 100644 --- a/app/players/automatedRun/videoRecordingClient.ts +++ b/app/players/automatedRun/videoRecordingClient.ts @@ -13,6 +13,9 @@ import delay from "@foxglove-studio/app/shared/delay"; import signal, { Signal } from "@foxglove-studio/app/shared/signal"; +import Logger from "@foxglove-studio/app/util/Logger"; + +const logger = new Logger("videoRecordingClient"); // This is the interface between the video recording server (recordVideo.js) and // the client (whomever uses `videoRecordingClient`). The idea is that the server opens a webpage @@ -93,7 +96,7 @@ class VideoRecordingClient { preloadStart = 0; start({ bagLengthMs }: { bagLengthMs: number }) { - console.log("videoRecordingClient.start()", bagLengthMs); + logger.info("videoRecordingClient.start()", bagLengthMs); } markFrameRenderStart() { @@ -111,7 +114,7 @@ class VideoRecordingClient { markPreloadEnd() { const preloadDurationMs = performance.now() - this.preloadStart; const preloadTimeSec = (preloadDurationMs / 1000).toFixed(1); - console.log(`[VideoRecordingClient] Preload duration: ${preloadTimeSec}s`); + logger.info(`[VideoRecordingClient] Preload duration: ${preloadTimeSec}s`); return preloadDurationMs; } @@ -148,7 +151,7 @@ class VideoRecordingClient { } finish() { - console.log("videoRecordingClient.finish()"); + logger.info("videoRecordingClient.finish()"); finishedMsPerFrame = msPerFrame; } } diff --git a/app/players/nodes.test.ts b/app/players/nodes.test.ts index 1441447c42c..a0c81e4c69f 100644 --- a/app/players/nodes.test.ts +++ b/app/players/nodes.test.ts @@ -12,6 +12,7 @@ // You may not use this file except in compliance with the License. import { $Shape } from "utility-types"; + import { validateNodeDefinitions, makeNodeMessage, diff --git a/app/players/types.ts b/app/players/types.ts index 2869377964b..b360ed8cf73 100644 --- a/app/players/types.ts +++ b/app/players/types.ts @@ -11,8 +11,8 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Values } from "utility-types"; import { Time, RosMsgDefinition } from "rosbag"; +import { $Values } from "utility-types"; import { BlockCache } from "@foxglove-studio/app/dataProviders/MemoryCacheDataProvider"; import { diff --git a/app/reducers/index.ts b/app/reducers/index.ts index ee363a24682..dd80bd2c3d9 100644 --- a/app/reducers/index.ts +++ b/app/reducers/index.ts @@ -31,9 +31,9 @@ import recentLayouts, { import tests from "@foxglove-studio/app/reducers/tests"; import userNodes, { UserNodeDiagnostics } from "@foxglove-studio/app/reducers/userNodes"; import { Auth as AuthState } from "@foxglove-studio/app/types/Auth"; +import { Dispatch, GetState } from "@foxglove-studio/app/types/Store"; import { HoverValue } from "@foxglove-studio/app/types/hoverValue"; import { MosaicKey, SetFetchedLayoutPayload } from "@foxglove-studio/app/types/panels"; -import { Dispatch, GetState } from "@foxglove-studio/app/types/Store"; const getReducers = (history: any) => [ (state: State) => ({ ...state, router: connectRouter(history)() }), @@ -84,6 +84,7 @@ export type Store = { dispatch: Dispatch; getState: () => State }; // Fix the type definitions for connected-react-router // The connectRouter function allows for omitting state and action declare module "connected-react-router" { + // eslint-disable-next-line @typescript-eslint/no-shadow export function connectRouter( history: History, ): (state?: RouterState, action?: LocationChangeAction) => RouterState; diff --git a/app/reducers/layoutHistory.test.ts b/app/reducers/layoutHistory.test.ts index a859e9446fc..aabfc67e103 100644 --- a/app/reducers/layoutHistory.test.ts +++ b/app/reducers/layoutHistory.test.ts @@ -11,14 +11,14 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import delay from "@foxglove-studio/app/shared/delay"; import { redoLayoutChange, undoLayoutChange } from "@foxglove-studio/app/actions/layoutHistory"; import { changePanelLayout, savePanelConfigs } from "@foxglove-studio/app/actions/panels"; +import { State } from "@foxglove-studio/app/reducers"; import { NEVER_PUSH_LAYOUT_THRESHOLD_MS } from "@foxglove-studio/app/reducers/layoutHistory"; import { GLOBAL_STATE_STORAGE_KEY } from "@foxglove-studio/app/reducers/panels"; +import delay from "@foxglove-studio/app/shared/delay"; import { getGlobalStoreForTest } from "@foxglove-studio/app/store/getGlobalStore"; import Storage from "@foxglove-studio/app/util/Storage"; -import { State } from "@foxglove-studio/app/reducers"; const storage = new Storage(); @@ -43,7 +43,7 @@ describe("state.layoutHistory", () => { }); it("stores initial empty history", () => { - const { store, checkState } = getStore(); + const { checkState } = getStore(); checkState(({ layoutHistory }) => { expect(layoutHistory).toEqual({ lastTimestamp: 0, redoStates: [], undoStates: [] }); }); diff --git a/app/reducers/layoutHistory.ts b/app/reducers/layoutHistory.ts index 9c10eca897f..f970ff78eba 100644 --- a/app/reducers/layoutHistory.ts +++ b/app/reducers/layoutHistory.ts @@ -16,7 +16,6 @@ import { isEqual } from "lodash"; import { ActionTypes } from "@foxglove-studio/app/actions"; import { panelEditingActions } from "@foxglove-studio/app/actions/panels"; import { State, PersistedState } from "@foxglove-studio/app/reducers"; - import { EditHistoryOptions } from "@foxglove-studio/app/types/panels"; import { pushState, diff --git a/app/reducers/panels.test.ts b/app/reducers/panels.test.ts index 3e5e6ab64e9..440b2300514 100644 --- a/app/reducers/panels.test.ts +++ b/app/reducers/panels.test.ts @@ -16,7 +16,6 @@ import fetchMock from "fetch-mock"; import { getLeaves } from "react-mosaic-component"; -import delay from "@foxglove-studio/app/shared/delay"; import { changePanelLayout, savePanelConfigs, @@ -34,16 +33,17 @@ import { fetchLayout, } from "@foxglove-studio/app/actions/panels"; import { getGlobalHooks } from "@foxglove-studio/app/loadWebviz"; +import { State } from "@foxglove-studio/app/reducers"; import { GLOBAL_STATE_STORAGE_KEY, resetInitialPersistedState, defaultPlaybackConfig, } from "@foxglove-studio/app/reducers/panels"; +import delay from "@foxglove-studio/app/shared/delay"; import { getGlobalStoreForTest } from "@foxglove-studio/app/store/getGlobalStore"; +import Storage from "@foxglove-studio/app/util/Storage"; import { TAB_PANEL_TYPE } from "@foxglove-studio/app/util/globalConstants"; import { getPanelTypeFromId } from "@foxglove-studio/app/util/layout"; -import Storage from "@foxglove-studio/app/util/Storage"; -import { State } from "@foxglove-studio/app/reducers"; const CURRENT_LAYOUT_VERSION = 16; const defaultPersistedState = Object.freeze(getGlobalHooks().getDefaultPersistedState()); @@ -65,7 +65,7 @@ describe("state.persistedState", () => { }); it("stores initial panel layout in local storage", () => { - const { store, checkState } = getStore(); + const { checkState } = getStore(); checkState(({ persistedState }) => { const globalState = storage.getItem(GLOBAL_STATE_STORAGE_KEY) || {}; expect(globalState).toEqual(persistedState); @@ -73,7 +73,7 @@ describe("state.persistedState", () => { }); it("stores default settings in local storage", () => { - const { store, checkState } = getStore(); + const { checkState } = getStore(); checkState(({ persistedState: { panels } }) => { expect(panels.layout).toEqual(defaultPersistedState.panels.layout); expect(panels.savedProps).toEqual({}); diff --git a/app/reducers/panels.ts b/app/reducers/panels.ts index 8945a32b7e0..8e56f1d8b8c 100644 --- a/app/reducers/panels.ts +++ b/app/reducers/panels.ts @@ -56,6 +56,7 @@ import { MosaicKey, MosaicDropTargetPosition, } from "@foxglove-studio/app/types/panels"; +import Storage from "@foxglove-studio/app/util/Storage"; import { TAB_PANEL_TYPE, LAYOUT_QUERY_KEY, @@ -82,7 +83,6 @@ import { stringifyParams, updateDocumentTitle, } from "@foxglove-studio/app/util/layout"; -import Storage from "@foxglove-studio/app/util/Storage"; const storage = new Storage(); diff --git a/app/reducers/recentLayouts.test.ts b/app/reducers/recentLayouts.test.ts index f0d05a63805..5462021f5a4 100644 --- a/app/reducers/recentLayouts.test.ts +++ b/app/reducers/recentLayouts.test.ts @@ -13,13 +13,12 @@ import fetchMock from "fetch-mock"; -import delay from "@foxglove-studio/app/shared/delay"; +import { maybeStoreNewRecentLayout, getRecentLayouts } from "./recentLayouts"; import { fetchLayout } from "@foxglove-studio/app/actions/panels"; +import delay from "@foxglove-studio/app/shared/delay"; import { getGlobalStoreForTest } from "@foxglove-studio/app/store/getGlobalStore"; import Storage from "@foxglove-studio/app/util/Storage"; -import { maybeStoreNewRecentLayout, getRecentLayouts } from "./recentLayouts"; - const storage = new Storage(); describe("recentLayouts", () => { diff --git a/app/shared/layout.ts b/app/shared/layout.ts index 2dd665d61ca..1381094d2a5 100644 --- a/app/shared/layout.ts +++ b/app/shared/layout.ts @@ -11,9 +11,10 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { PanelsState } from "@foxglove-studio/app/reducers/panels"; import crypto from "crypto"; +import { PanelsState } from "@foxglove-studio/app/reducers/panels"; + export function layoutIdHasVersionInfo(layoutId: string) { return layoutId.match(/@\d+/g); } diff --git a/app/store/getGlobalStore.ts b/app/store/getGlobalStore.ts index 29bba8ad444..9b1cde630b0 100644 --- a/app/store/getGlobalStore.ts +++ b/app/store/getGlobalStore.ts @@ -17,8 +17,8 @@ import updateUrlAndLocalStorageMiddleware from "@foxglove-studio/app/middleware/ import createRootReducer from "@foxglove-studio/app/reducers"; import configureStore from "@foxglove-studio/app/store"; import configureTestingStore from "@foxglove-studio/app/store/configureStore.testing"; -import history from "@foxglove-studio/app/util/history"; import { Store } from "@foxglove-studio/app/types/Store"; +import history from "@foxglove-studio/app/util/history"; let store: Store | undefined = undefined; // We have to wrap the actual creation of the global store in a function so that we only run it diff --git a/app/stories/PanelSetup.tsx b/app/stories/PanelSetup.tsx index c43b7c4aee9..92c6e9105b5 100644 --- a/app/stories/PanelSetup.tsx +++ b/app/stories/PanelSetup.tsx @@ -11,13 +11,13 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { $Shape } from "utility-types"; import { createMemoryHistory } from "history"; import { flatten, partition } from "lodash"; import * as React from "react"; import { DndProvider } from "react-dnd"; import HTML5Backend from "react-dnd-html5-backend"; import { Mosaic, MosaicWindow } from "react-mosaic-component"; +import { $Shape } from "utility-types"; import { changePanelLayout, @@ -34,16 +34,16 @@ import { import { MockMessagePipelineProvider } from "@foxglove-studio/app/components/MessagePipeline"; import { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; import { LinkedGlobalVariables } from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/useLinkedGlobalVariables"; -import { Frame, Topic, PlayerStateActiveData, Progress } from "@foxglove-studio/app/players/types"; import { UserNodeDiagnostics, UserNodeLogs, } from "@foxglove-studio/app/players/UserNodePlayer/types"; +import { Frame, Topic, PlayerStateActiveData, Progress } from "@foxglove-studio/app/players/types"; import createRootReducer from "@foxglove-studio/app/reducers"; -import { Store } from "@foxglove-studio/app/types/Store"; import configureStore from "@foxglove-studio/app/store/configureStore.testing"; -import { MosaicNode, SavedProps, UserNodes } from "@foxglove-studio/app/types/panels"; import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; +import { Store } from "@foxglove-studio/app/types/Store"; +import { MosaicNode, SavedProps, UserNodes } from "@foxglove-studio/app/types/panels"; import { objectValues } from "@foxglove-studio/app/util"; import { isBobject } from "@foxglove-studio/app/util/binaryObjects"; diff --git a/app/stories/PanelSetupWithBag.tsx b/app/stories/PanelSetupWithBag.tsx index 6772644c261..473265f8069 100644 --- a/app/stories/PanelSetupWithBag.tsx +++ b/app/stories/PanelSetupWithBag.tsx @@ -18,8 +18,8 @@ import { useEffect, useState } from "react"; // eslint-disable-line import/no-du import NodePlayer from "@foxglove-studio/app/players/NodePlayer"; import StoryPlayer from "@foxglove-studio/app/players/StoryPlayer"; import { PlayerState, SubscribePayload } from "@foxglove-studio/app/players/types"; -import { Store } from "@foxglove-studio/app/types/Store"; import PanelSetup, { Fixture } from "@foxglove-studio/app/stories/PanelSetup"; +import { Store } from "@foxglove-studio/app/types/Store"; const defaultGetMergedFixture = (bagFixture: Fixture) => bagFixture; diff --git a/app/test/setup.ts b/app/test/setup.ts index 328e7f24703..5ad664c6fe9 100644 --- a/app/test/setup.ts +++ b/app/test/setup.ts @@ -19,8 +19,8 @@ import util from "util"; import ws from "ws"; import { testSetup } from "../hooksImporter"; -import { resetLogEventForTests } from "@foxglove-studio/app/util/logEvent"; import MemoryStorage from "./MemoryStorage"; +import { resetLogEventForTests } from "@foxglove-studio/app/util/logEvent"; process.env.WASM_LZ4_ENVIRONMENT = "NODE"; diff --git a/app/types/Store.ts b/app/types/Store.ts index 74936b2748b..ff2f5d787fe 100644 --- a/app/types/Store.ts +++ b/app/types/Store.ts @@ -11,7 +11,7 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import type { Action, Store as ReduxStore, Dispatch as ReduxDispatch } from "redux"; +import type { Action, Store as ReduxStore } from "redux"; import { State } from "@foxglove-studio/app/reducers"; diff --git a/app/types/panels.ts b/app/types/panels.ts index 6731a9bc3ff..d36fb3682df 100644 --- a/app/types/panels.ts +++ b/app/types/panels.ts @@ -10,11 +10,6 @@ // This source code is licensed under the Apache License, Version 2.0, // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; -import { LinkedGlobalVariables } from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/useLinkedGlobalVariables"; -import { PanelsState } from "@foxglove-studio/app/reducers/panels"; -import { TimestampMethod } from "@foxglove-studio/app/util/time"; - import type { MosaicNode as OrigMosaicNode, MosaicPath, @@ -22,6 +17,11 @@ import type { MosaicDirection, } from "react-mosaic-component"; +import { GlobalVariables } from "@foxglove-studio/app/hooks/useGlobalVariables"; +import { LinkedGlobalVariables } from "@foxglove-studio/app/panels/ThreeDimensionalViz/Interactions/useLinkedGlobalVariables"; +import { PanelsState } from "@foxglove-studio/app/reducers/panels"; +import { TimestampMethod } from "@foxglove-studio/app/util/time"; + // Mosaic Types export type MosaicKey = string | number; export type MosaicDropTargetPosition = "top" | "bottom" | "left" | "right"; diff --git a/app/util/CachedFilelike.ts b/app/util/CachedFilelike.ts index 92e6fa0aa3e..82c4630b0b5 100644 --- a/app/util/CachedFilelike.ts +++ b/app/util/CachedFilelike.ts @@ -13,9 +13,10 @@ import { round } from "lodash"; import { Callback, Filelike } from "rosbag"; +import VirtualLRUBuffer from "./VirtualLRUBuffer"; import { getNewConnection } from "./getNewConnection"; import { Range } from "./ranges"; -import VirtualLRUBuffer from "./VirtualLRUBuffer"; +import Logger from "@foxglove-studio/app/util/Logger"; // CachedFilelike is a `Filelike` that attempts to do as much caching of the file in memory as // possible. It takes in 3 named arguments to its constructor: @@ -61,12 +62,14 @@ const CACHE_BLOCK_SIZE = 1024 * 1024 * 10; // 10MiB blocks. // account actual download speed. const CLOSE_ENOUGH_BYTES_TO_NOT_START_NEW_CONNECTION = 1024 * 1024 * 5; +const logger = new Logger("CachedFilelike"); + export default class CachedFilelike implements Filelike { _fileReader: FileReader; _cacheSizeInBytes: number = Infinity; _fileSize: number; _virtualBuffer: VirtualLRUBuffer; - _logFn: (arg0: string) => void = (msg) => console.log(msg); + _logFn: (arg0: string) => void = (msg) => logger.info(msg); _closed: boolean = false; _keepReconnectingCallback?: (reconnecting: boolean) => void; diff --git a/app/util/Logger.ts b/app/util/Logger.ts index 5d50da8ed51..d622bd48f59 100644 --- a/app/util/Logger.ts +++ b/app/util/Logger.ts @@ -28,6 +28,7 @@ export default class Logger { info(message: string, ...args: any[]) { if (showLogs) { + // eslint-disable-next-line no-restricted-syntax console.info(this.name, message, ...args); } } diff --git a/app/util/RpcWorkerUtils.ts b/app/util/RpcWorkerUtils.ts index b0d3de70609..30a7dbe8919 100644 --- a/app/util/RpcWorkerUtils.ts +++ b/app/util/RpcWorkerUtils.ts @@ -11,8 +11,8 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import overwriteFetch from "./overwriteFetch"; import Rpc from "./Rpc"; +import overwriteFetch from "./overwriteFetch"; import { initializeLogEvent } from "@foxglove-studio/app/util/logEvent"; import { setNotificationHandler, diff --git a/app/util/binaryObjects/BobjectRpc.test.ts b/app/util/binaryObjects/BobjectRpc.test.ts index 8b21908db10..08019c8bd5f 100644 --- a/app/util/binaryObjects/BobjectRpc.test.ts +++ b/app/util/binaryObjects/BobjectRpc.test.ts @@ -11,8 +11,9 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import signal from "@foxglove-studio/app/shared/signal"; import { cast } from "@foxglove-studio/app/players/types"; +import signal from "@foxglove-studio/app/shared/signal"; +import Rpc, { createLinkedChannels } from "@foxglove-studio/app/util/Rpc"; import { deepParse, getObject, wrapJsObject } from "@foxglove-studio/app/util/binaryObjects"; import { BobjectRpcSender, @@ -22,7 +23,6 @@ import { definitions, HasComplexAndArray, } from "@foxglove-studio/app/util/binaryObjects/messageDefinitionUtils.test"; -import Rpc, { createLinkedChannels } from "@foxglove-studio/app/util/Rpc"; const datatype = "fake_msgs/HasComplexAndArray"; diff --git a/app/util/binaryObjects/BobjectRpc.ts b/app/util/binaryObjects/BobjectRpc.ts index 4eac6862a9d..9b469f95aaf 100644 --- a/app/util/binaryObjects/BobjectRpc.ts +++ b/app/util/binaryObjects/BobjectRpc.ts @@ -15,6 +15,7 @@ import { Time } from "rosbag"; import { Message } from "@foxglove-studio/app/players/types"; import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; +import Rpc from "@foxglove-studio/app/util/Rpc"; import { deepParse, getBinaryData, @@ -22,7 +23,6 @@ import { wrapJsObject, } from "@foxglove-studio/app/util/binaryObjects"; import { getDatatypes } from "@foxglove-studio/app/util/binaryObjects/messageDefinitionUtils"; -import Rpc from "@foxglove-studio/app/util/Rpc"; type CommonTransferData = Readonly<{ action: string; diff --git a/app/util/datatypes.ts b/app/util/datatypes.ts index cee3d824354..403f16ff29c 100644 --- a/app/util/datatypes.ts +++ b/app/util/datatypes.ts @@ -15,7 +15,7 @@ import { MessageDefinitionsByTopic, ParsedMessageDefinitionsByTopic, } from "@foxglove-studio/app/players/types"; -import { RosDatatype, RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; +import { RosDatatypes } from "@foxglove-studio/app/types/RosDatatypes"; import { isComplex } from "@foxglove-studio/app/util/binaryObjects/messageDefinitionUtils"; import { FUTURE_VIZ_MSGS_DATATYPE, diff --git a/app/util/hooks.tsx b/app/util/hooks.tsx index d5c95489527..722830d78e1 100644 --- a/app/util/hooks.tsx +++ b/app/util/hooks.tsx @@ -12,7 +12,7 @@ // You may not use this file except in compliance with the License. import { isEqual } from "lodash"; -import React, { +import { useCallback, useRef, useLayoutEffect, @@ -22,8 +22,6 @@ import React, { ComponentType, Context, ReactNode, - ReactChildren, - PropsWithChildren, } from "react"; import shallowequal from "shallowequal"; @@ -147,10 +145,10 @@ export function createSelectableContext(): SelectableContext { const ctx = createContext | undefined>(undefined); function Provider({ value, children }: { value: T; children?: ReactNode }) { - const [handle] = useState(() => { + const [handle] = useState>(() => { let currentValue = value; const subscribers = new Set>(); - const handle: SelectableContextHandle = { + return { publish(val) { currentValue = val; for (const sub of subscribers) { @@ -167,7 +165,6 @@ export function createSelectableContext(): SelectableContext { subscribers.delete(sub); }, }; - return handle; }); const valueChanged = useChangeDetector([value], false); diff --git a/app/util/indexeddb/MetaDatabase.test.ts b/app/util/indexeddb/MetaDatabase.test.ts index 28e24e97afb..cb84df4d27f 100644 --- a/app/util/indexeddb/MetaDatabase.test.ts +++ b/app/util/indexeddb/MetaDatabase.test.ts @@ -14,8 +14,8 @@ import idb from "idb"; import Database from "./Database"; -import { getDatabasesInTests } from "./getDatabasesInTests"; import { updateMetaDatabases, doesDatabaseExist } from "./MetaDatabase"; +import { getDatabasesInTests } from "./getDatabasesInTests"; describe("MetaDatabase", () => { const MAX = 3; @@ -67,22 +67,18 @@ describe("MetaDatabase", () => { }); it("does not throw when database deletion throws an error", async () => { - const spy = jest - .spyOn(global.indexedDB, "deleteDatabase") - .mockImplementation((name: string) => { - throw new Error("failed to delete"); - }); + const spy = jest.spyOn(global.indexedDB, "deleteDatabase").mockImplementation(() => { + throw new Error("failed to delete"); + }); await updateMetaDatabases("foo", 1, METADATABASE_NAME); await updateMetaDatabases("bar", 1, METADATABASE_NAME); spy.mockRestore(); }); it("does not delete databases which never fire onblocked calls", async () => { - const spy = jest - .spyOn(global.indexedDB, "deleteDatabase") - .mockImplementation((name: string) => { - return new IDBOpenDBRequest(); - }); + const spy = jest.spyOn(global.indexedDB, "deleteDatabase").mockImplementation(() => { + return new IDBOpenDBRequest(); + }); await updateMetaDatabases("foo", 1, METADATABASE_NAME); await updateMetaDatabases("bar", 1, METADATABASE_NAME); spy.mockRestore(); diff --git a/app/util/indexeddb/MetaDatabase.ts b/app/util/indexeddb/MetaDatabase.ts index 4d974dcd98e..455b770c9b0 100644 --- a/app/util/indexeddb/MetaDatabase.ts +++ b/app/util/indexeddb/MetaDatabase.ts @@ -11,8 +11,8 @@ // found at http://www.apache.org/licenses/LICENSE-2.0 // You may not use this file except in compliance with the License. -import Database from "@foxglove-studio/app/util/indexeddb/Database"; import Logger from "@foxglove-studio/app/util/Logger"; +import Database from "@foxglove-studio/app/util/indexeddb/Database"; const log = new Logger(__filename); diff --git a/app/util/layout.ts b/app/util/layout.ts index 2a67783ce9c..4ecba9c3647 100644 --- a/app/util/layout.ts +++ b/app/util/layout.ts @@ -12,6 +12,7 @@ // You may not use this file except in compliance with the License. import * as Sentry from "@sentry/browser"; import CBOR from "cbor-js"; +import { create as JsonDiffCreate } from "jsondiffpatch"; import { compact, cloneDeep, flatMap, isEmpty, xor, uniq } from "lodash"; import { createRemoveUpdate, @@ -22,11 +23,10 @@ import { MosaicUpdate, } from "react-mosaic-component"; import zlib from "zlib"; -import { create as JsonDiffCreate } from "jsondiffpatch"; import { isInIFrame } from "./iframeUtils"; -import { getLayoutNameAndVersion } from "@foxglove-studio/app/shared/layout"; import { PanelsState } from "@foxglove-studio/app/reducers/panels"; +import { getLayoutNameAndVersion } from "@foxglove-studio/app/shared/layout"; import { TabLocation, TabPanelConfig } from "@foxglove-studio/app/types/layouts"; import { ConfigsPayload, @@ -36,7 +36,6 @@ import { MosaicPath, MosaicDropTargetPosition, SavedProps, - MosaicKey, } from "@foxglove-studio/app/types/panels"; import { TAB_PANEL_TYPE, @@ -252,13 +251,13 @@ export const validateTabPanelConfig = (config: PanelConfig | null | undefined) = const error = new Error( "A non-Tab panel config is being operated on as if it were a Tab panel.", ); - console.log("Invalid Tab panel config:", config, error); + console.warn("Invalid Tab panel config:", config, error); Sentry.captureException(error); return false; } if (config && config.activeTabIdx >= config.tabs.length) { const error = new Error("A Tab panel has an activeTabIdx for a nonexistent tab."); - console.log("Invalid Tab panel config:", config, error); + console.warn("Invalid Tab panel config:", config, error); Sentry.captureException(error); return false; } diff --git a/app/util/parseMessageDefinitionsCache.test.ts b/app/util/parseMessageDefinitionsCache.test.ts index 13b714a7099..6e3e3f41a11 100644 --- a/app/util/parseMessageDefinitionsCache.test.ts +++ b/app/util/parseMessageDefinitionsCache.test.ts @@ -17,8 +17,8 @@ import { getStorageForTest, restoreStorageForTest, } from "./parseMessageDefinitionsCache"; -import sendNotification from "@foxglove-studio/app/util/sendNotification"; import Storage, { clearBustStorageFnsMap } from "@foxglove-studio/app/util/Storage"; +import sendNotification from "@foxglove-studio/app/util/sendNotification"; const storage = new Storage(); diff --git a/app/util/parseMessageDefinitionsCache.ts b/app/util/parseMessageDefinitionsCache.ts index 912bca73413..04b8a73d85a 100644 --- a/app/util/parseMessageDefinitionsCache.ts +++ b/app/util/parseMessageDefinitionsCache.ts @@ -15,8 +15,8 @@ import { fromPairs, difference } from "lodash"; import { parseMessageDefinition, RosMsgDefinition } from "rosbag"; import MemoryStorage from "@foxglove-studio/app/test/MemoryStorage"; -import sendNotification from "@foxglove-studio/app/util/sendNotification"; import Storage, { BackingStore, BustStorageFn } from "@foxglove-studio/app/util/Storage"; +import sendNotification from "@foxglove-studio/app/util/sendNotification"; import { inWebWorker } from "@foxglove-studio/app/util/workers"; export const STORAGE_ITEM_KEY_PREFIX = "msgdefn/"; diff --git a/app/util/synchronizeMessages.test.ts b/app/util/synchronizeMessages.test.ts index 1a5e1362b62..fdc389d9269 100644 --- a/app/util/synchronizeMessages.test.ts +++ b/app/util/synchronizeMessages.test.ts @@ -12,6 +12,7 @@ // You may not use this file except in compliance with the License. import { Time } from "rosbag"; + import synchronizeMessages, { getSynchronizingReducers } from "./synchronizeMessages"; function message(topic: string, stamp?: Time) { diff --git a/app/util/synchronizeMessages.ts b/app/util/synchronizeMessages.ts index 0ab0c37e8f8..f8dde0e046a 100644 --- a/app/util/synchronizeMessages.ts +++ b/app/util/synchronizeMessages.ts @@ -15,7 +15,6 @@ import { mapValues } from "lodash"; import { TimeUtil, Time } from "rosbag"; import { cast, Message, RosObject } from "@foxglove-studio/app/players/types"; - import { StampedMessage } from "@foxglove-studio/app/types/Messages"; export const defaultGetHeaderStamp = ( diff --git a/desktop/.eslintrc.yaml b/desktop/.eslintrc.yaml index 83af09e2125..306a2e0668e 100644 --- a/desktop/.eslintrc.yaml +++ b/desktop/.eslintrc.yaml @@ -1,2 +1,14 @@ parserOptions: project: desktop/tsconfig.json +settings: + import/resolver: + webpack: + config: ./webpack.main.config.ts + +rules: + # Re-enable these when https://github.com/benmosher/eslint-plugin-import/issues/1996 is fixed + import/no-unresolved: off + import/namespace: off + import/default: off + import/no-named-as-default: off + import/no-named-as-default-member: off diff --git a/desktop/index.ts b/desktop/index.ts index 59e8aceaea9..ee9691fe0b7 100644 --- a/desktop/index.ts +++ b/desktop/index.ts @@ -2,25 +2,27 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/ +// Allow console logs in this file +/* eslint-disable no-restricted-syntax */ + import "colors"; import { app, shell, - ipcMain, BrowserWindow, Menu, MenuItemConstructorOptions, BrowserWindowConstructorOptions, systemPreferences, } from "electron"; -import path from "path"; import installExtension, { REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS, } from "electron-devtools-installer"; -import colors from "@foxglove-studio/app/styles/colors.module.scss"; +import path from "path"; import type { OsContextWindowEvent } from "@foxglove-studio/app/OsContext"; +import colors from "@foxglove-studio/app/styles/colors.module.scss"; declare const MAIN_WINDOW_WEBPACK_ENTRY: string; diff --git a/package.json b/package.json index f939d0fbfce..8adf362204f 100644 --- a/package.json +++ b/package.json @@ -66,8 +66,8 @@ "@types/electron-devtools-installer": "2.2.0", "@types/jest": "26.0.20", "@types/webpack-dev-server": "3.11.1", - "@typescript-eslint/eslint-plugin": "4.15.0", - "@typescript-eslint/parser": "4.15.0", + "@typescript-eslint/eslint-plugin": "4.15.2", + "@typescript-eslint/parser": "4.15.2", "browserify-zlib": "0.2.0", "colors": "1.4.0", "crypto-browserify": "3.12.0", @@ -76,7 +76,8 @@ "electron-devtools-installer": "3.1.1", "electron-squirrel-startup": "1.0.0", "eslint": "7.20.0", - "eslint-config-prettier": "7.2.0", + "eslint-config-prettier": "8.1.0", + "eslint-import-resolver-webpack": "0.13.0", "eslint-plugin-header": "github:amacneil/eslint-plugin-header#notemplate", "eslint-plugin-import": "2.22.1", "eslint-plugin-prettier": "3.3.1", diff --git a/preload/.eslintrc.yaml b/preload/.eslintrc.yaml index 69f64f7a2f4..84acee043c1 100644 --- a/preload/.eslintrc.yaml +++ b/preload/.eslintrc.yaml @@ -1,2 +1,6 @@ parserOptions: project: preload/tsconfig.json +settings: + import/resolver: + webpack: + config: ./webpack.preload.config.ts diff --git a/preload/index.ts b/preload/index.ts index 491d7f37479..3edb6642ca1 100644 --- a/preload/index.ts +++ b/preload/index.ts @@ -4,8 +4,8 @@ import { contextBridge, ipcRenderer } from "electron"; -import { OsMenuHandler } from "@foxglove-studio/app/OsMenuHandler"; import { OsContext, OsContextWindowEvent } from "@foxglove-studio/app/OsContext"; +import { OsMenuHandler } from "@foxglove-studio/app/OsMenuHandler"; const ctx: OsContext = { platform: process.platform, diff --git a/typings/compressjs/index.d.ts b/typings/compressjs/index.d.ts index 356a70a455f..c1cd7219fc9 100644 --- a/typings/compressjs/index.d.ts +++ b/typings/compressjs/index.d.ts @@ -2,14 +2,12 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/ -namespace Bzip2 { - declare function decompressFile(buff: Buffer): Buffer; -} - declare module "compressjs" { - export const Bzip2: Bzip2; + export const Bzip2: { + decompressFile(buff: Buffer): Buffer; + }; } declare module "compressjs/lib/Bzip2" { - export default Bzip2; + export function decompressFile(_buff: Buffer): Buffer; } diff --git a/webpack.config.ts b/webpack.config.ts index e79705ecd9b..3b40d981eff 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -2,16 +2,15 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/ +import HtmlWebpackPlugin from "html-webpack-plugin"; import path from "path"; import type { Configuration } from "webpack"; import type { Configuration as WebpackDevServerConfiguration } from "webpack-dev-server"; -import HtmlWebpackPlugin from "html-webpack-plugin"; +import packageInfo from "./package.json"; import main from "./webpack.main.config"; -import renderer from "./webpack.renderer.config"; import preload from "./webpack.preload.config"; - -import packageInfo from "./package.json"; +import renderer from "./webpack.renderer.config"; interface WebpackConfiguration extends Configuration { devServer?: WebpackDevServerConfiguration; diff --git a/webpack.main.config.ts b/webpack.main.config.ts index 4796b29dcec..35622f184ab 100644 --- a/webpack.main.config.ts +++ b/webpack.main.config.ts @@ -2,8 +2,8 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/ -import path from "path"; import ForkTsCheckerWebpackPlugin from "fork-ts-checker-webpack-plugin"; +import path from "path"; import { Configuration, ResolveOptions, DefinePlugin } from "webpack"; import { WebpackArgv } from "./WebpackArgv"; diff --git a/webpack.preload.config.ts b/webpack.preload.config.ts index f7c23aed631..1a3da91ad75 100644 --- a/webpack.preload.config.ts +++ b/webpack.preload.config.ts @@ -2,13 +2,13 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/ -import path from "path"; import ForkTsCheckerWebpackPlugin from "fork-ts-checker-webpack-plugin"; +import path from "path"; import type { Configuration } from "webpack"; import { WebpackArgv } from "./WebpackArgv"; -export default (_: never, argv: WebpackArgv): Configuration => { +export default (_: never, _argv: WebpackArgv): Configuration => { return { context: path.resolve("./preload"), entry: "./index.ts", diff --git a/webpack.renderer.config.ts b/webpack.renderer.config.ts index 1e738054eab..3ccd5b2ca08 100644 --- a/webpack.renderer.config.ts +++ b/webpack.renderer.config.ts @@ -2,12 +2,12 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/ -import path from "path"; -import retext from "retext"; import rehypePrism from "@mapbox/rehype-prism"; -import retextSmartypants from "retext-smartypants"; import ForkTsCheckerWebpackPlugin from "fork-ts-checker-webpack-plugin"; import HtmlWebpackPlugin from "html-webpack-plugin"; +import path from "path"; +import retext from "retext"; +import retextSmartypants from "retext-smartypants"; import webpack, { Configuration } from "webpack"; import { WebpackArgv } from "./WebpackArgv"; diff --git a/yarn.lock b/yarn.lock index d86b04b0f53..148c8900768 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4087,12 +4087,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:4.15.0": - version: 4.15.0 - resolution: "@typescript-eslint/eslint-plugin@npm:4.15.0" +"@typescript-eslint/eslint-plugin@npm:4.15.2": + version: 4.15.2 + resolution: "@typescript-eslint/eslint-plugin@npm:4.15.2" dependencies: - "@typescript-eslint/experimental-utils": 4.15.0 - "@typescript-eslint/scope-manager": 4.15.0 + "@typescript-eslint/experimental-utils": 4.15.2 + "@typescript-eslint/scope-manager": 4.15.2 debug: ^4.1.1 functional-red-black-tree: ^1.0.1 lodash: ^4.17.15 @@ -4105,66 +4105,66 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: ed02b9b85752c76dcc56dcefc498263f5c777423097cad973da8b08c93e2a471d9babdafc307f8dfd5b3f76c7f918ece758f72b65e48acf62253302e29db26c0 + checksum: b9884a9f851e8122c2a30475dd68c046daccca7e1feb294ed472c05f2c19e08d7f75a4401d678286307fe4ad9fe20e71f0097d605ba86df9f475dd71a3ac7406 languageName: node linkType: hard -"@typescript-eslint/experimental-utils@npm:4.15.0": - version: 4.15.0 - resolution: "@typescript-eslint/experimental-utils@npm:4.15.0" +"@typescript-eslint/experimental-utils@npm:4.15.2": + version: 4.15.2 + resolution: "@typescript-eslint/experimental-utils@npm:4.15.2" dependencies: "@types/json-schema": ^7.0.3 - "@typescript-eslint/scope-manager": 4.15.0 - "@typescript-eslint/types": 4.15.0 - "@typescript-eslint/typescript-estree": 4.15.0 + "@typescript-eslint/scope-manager": 4.15.2 + "@typescript-eslint/types": 4.15.2 + "@typescript-eslint/typescript-estree": 4.15.2 eslint-scope: ^5.0.0 eslint-utils: ^2.0.0 peerDependencies: eslint: "*" - checksum: c918b9f052b4feddea210f225229946ff4061b3e11c415a29c1ed221631c2050016ddd77059f9a9974ba18ba2c4e8cbdc737148bda5ed9690869ec6e16b25735 + checksum: a4d5719ea39fa798e6d562ddd94cd11df5c08769ab1f2e615ed82dc99557c8e9cae0a68148b14eab518b0c90112450381725764a3ab72cc302b1c50ced32f69d languageName: node linkType: hard -"@typescript-eslint/parser@npm:4.15.0": - version: 4.15.0 - resolution: "@typescript-eslint/parser@npm:4.15.0" +"@typescript-eslint/parser@npm:4.15.2": + version: 4.15.2 + resolution: "@typescript-eslint/parser@npm:4.15.2" dependencies: - "@typescript-eslint/scope-manager": 4.15.0 - "@typescript-eslint/types": 4.15.0 - "@typescript-eslint/typescript-estree": 4.15.0 + "@typescript-eslint/scope-manager": 4.15.2 + "@typescript-eslint/types": 4.15.2 + "@typescript-eslint/typescript-estree": 4.15.2 debug: ^4.1.1 peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 23b879a98cbb34481fcd82cf2320ad65238d0203a31b564fcf019cca80560dcd597292951e5301db75a4e2d6e4c483c5a57d14795feffa74b4bbc5aa4e66da4b + checksum: 663ff687c0988a100c791adcb1161b90b43dd5ea0a8345aa344d47a7166d36e69ea1b2f323a34f877f2c151cb03bf38516252d6c30cf0e38fad831bef0cf3236 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:4.15.0": - version: 4.15.0 - resolution: "@typescript-eslint/scope-manager@npm:4.15.0" +"@typescript-eslint/scope-manager@npm:4.15.2": + version: 4.15.2 + resolution: "@typescript-eslint/scope-manager@npm:4.15.2" dependencies: - "@typescript-eslint/types": 4.15.0 - "@typescript-eslint/visitor-keys": 4.15.0 - checksum: 39123983dc626ed503b0251648511424248cb122aa5c5d55583e99c57d0b14552eff333c15ebfd9590628479c935f9db86c299bff9e0ced5c71f7d0bd3235f86 + "@typescript-eslint/types": 4.15.2 + "@typescript-eslint/visitor-keys": 4.15.2 + checksum: 3bb4a01c34423635807d9ffc8b1108be24ffb945447bee5fd9ed1182e039c9ce5ee22905e56859477a64af87fcdc8cb492516acaa123947ea1875e722a575da8 languageName: node linkType: hard -"@typescript-eslint/types@npm:4.15.0": - version: 4.15.0 - resolution: "@typescript-eslint/types@npm:4.15.0" - checksum: e45ff88c0ef96aca42919ffceff1120bac08bf4507d1af4241b5f5ff819d181fcd27e2d788dd8b6fef095e1c23fbce0411a9cce6d6b5aef09b591732fec55d33 +"@typescript-eslint/types@npm:4.15.2": + version: 4.15.2 + resolution: "@typescript-eslint/types@npm:4.15.2" + checksum: 5c82f89c8d6703d4e20d736d7f1c397be0161a286760368862d2502a107b27b91cd14af46623e2ad741825157a6b8dacd74b3b27df7f0a813371a770712c112a languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:4.15.0": - version: 4.15.0 - resolution: "@typescript-eslint/typescript-estree@npm:4.15.0" +"@typescript-eslint/typescript-estree@npm:4.15.2": + version: 4.15.2 + resolution: "@typescript-eslint/typescript-estree@npm:4.15.2" dependencies: - "@typescript-eslint/types": 4.15.0 - "@typescript-eslint/visitor-keys": 4.15.0 + "@typescript-eslint/types": 4.15.2 + "@typescript-eslint/visitor-keys": 4.15.2 debug: ^4.1.1 globby: ^11.0.1 is-glob: ^4.0.1 @@ -4173,17 +4173,17 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 5768e5ee4bed2d79631ad5484576e04b6590aa260c043fbaee4ee4e3dfb93f4b8aaec8d3c1e446e82225603664a2e0b56066cfa0502198fd83c5a1e2af52251a + checksum: 01ece3245265df90b9dc2856f887dd261ddfa22edf0bb6cc8b54e54886c82b6fd1eb46405fca9dba7793fc682ef3e8766319aeb28d5910048a596ea76d13675c languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:4.15.0": - version: 4.15.0 - resolution: "@typescript-eslint/visitor-keys@npm:4.15.0" +"@typescript-eslint/visitor-keys@npm:4.15.2": + version: 4.15.2 + resolution: "@typescript-eslint/visitor-keys@npm:4.15.2" dependencies: - "@typescript-eslint/types": 4.15.0 + "@typescript-eslint/types": 4.15.2 eslint-visitor-keys: ^2.0.0 - checksum: 6f7aa6f4c726177e23344155784593b30ae36ff7a9240503b7876174b187ed16447802ccff7d6d70b0a633a2b2e4c54779074a2790ca2263c61717dcccd1d518 + checksum: 9a4c23925a189722618488f8db8452ca738fecbb704393ddb17d25938f034cfbe47e25bd75744967ae942528aeb79e98ed65f703384070b14d33f5f3134fde90 languageName: node linkType: hard @@ -5006,6 +5006,13 @@ __metadata: languageName: node linkType: hard +"array-find@npm:^1.0.0": + version: 1.0.0 + resolution: "array-find@npm:1.0.0" + checksum: 1f6f5270a3e4a02324815e732a66ef962becaf69d064e45d8377c023a29cec5abd7236e2fe00036fdf622c0ce178649d78fd83452464644f78c346d6336c1d6c + languageName: node + linkType: hard + "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" @@ -9120,6 +9127,17 @@ __metadata: languageName: node linkType: hard +"enhanced-resolve@npm:^0.9.1": + version: 0.9.1 + resolution: "enhanced-resolve@npm:0.9.1" + dependencies: + graceful-fs: ^4.1.2 + memory-fs: ^0.2.0 + tapable: ^0.1.8 + checksum: c814cd928250e8c0133132e9557ca96f125dcfe974ec8a9818c08deb0d1f280b5ad0f5a3cb74b63be1af029f1d1584f51fa11ce355e944d42d7c543b7795f8fb + languageName: node + linkType: hard + "enhanced-resolve@npm:^4.0.0, enhanced-resolve@npm:^4.5.0": version: 4.5.0 resolution: "enhanced-resolve@npm:4.5.0" @@ -9413,14 +9431,14 @@ __metadata: languageName: node linkType: hard -"eslint-config-prettier@npm:7.2.0": - version: 7.2.0 - resolution: "eslint-config-prettier@npm:7.2.0" +"eslint-config-prettier@npm:8.1.0": + version: 8.1.0 + resolution: "eslint-config-prettier@npm:8.1.0" peerDependencies: eslint: ">=7.0.0" bin: eslint-config-prettier: bin/cli.js - checksum: 6812150ea49703cd64035527205b4905bc1edcd34646e71f71665e1acff9ab4648f872598389bdb209964093ad73993830a2c821ba12642764a5293513b92a58 + checksum: 409d3a071f8228d4c958a6a9be9d5ec2b357ce21b7b6cbb137096cade2c31f008a0a3c3533dee8979c0cd944f220a959710b30fd86f8b96f0ef1f4f557d740b3 languageName: node linkType: hard @@ -9434,6 +9452,27 @@ __metadata: languageName: node linkType: hard +"eslint-import-resolver-webpack@npm:0.13.0": + version: 0.13.0 + resolution: "eslint-import-resolver-webpack@npm:0.13.0" + dependencies: + array-find: ^1.0.0 + debug: ^2.6.9 + enhanced-resolve: ^0.9.1 + find-root: ^1.1.0 + has: ^1.0.3 + interpret: ^1.2.0 + lodash: ^4.17.15 + node-libs-browser: ^1.0.0 || ^2.0.0 + resolve: ^1.13.1 + semver: ^5.7.1 + peerDependencies: + eslint-plugin-import: ">=1.4.0" + webpack: ">=1.11.0" + checksum: a04f839a2f7de296a98b49ab69ef5aaca44804035383e24276070b5e86b5c745a9ea7c7a94f9d24426305c482138b153efede42da4cb9686a00d58ba04451178 + languageName: node + linkType: hard + "eslint-module-utils@npm:^2.6.0": version: 2.6.0 resolution: "eslint-module-utils@npm:2.6.0" @@ -10488,8 +10527,8 @@ __metadata: "@types/electron-devtools-installer": 2.2.0 "@types/jest": 26.0.20 "@types/webpack-dev-server": 3.11.1 - "@typescript-eslint/eslint-plugin": 4.15.0 - "@typescript-eslint/parser": 4.15.0 + "@typescript-eslint/eslint-plugin": 4.15.2 + "@typescript-eslint/parser": 4.15.2 browserify-zlib: 0.2.0 colors: 1.4.0 crypto-browserify: 3.12.0 @@ -10498,7 +10537,8 @@ __metadata: electron-devtools-installer: 3.1.1 electron-squirrel-startup: 1.0.0 eslint: 7.20.0 - eslint-config-prettier: 7.2.0 + eslint-config-prettier: 8.1.0 + eslint-import-resolver-webpack: 0.13.0 eslint-plugin-header: "github:amacneil/eslint-plugin-header#notemplate" eslint-plugin-import: 2.22.1 eslint-plugin-prettier: 3.3.1 @@ -12334,7 +12374,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"interpret@npm:^1.0.0": +"interpret@npm:^1.0.0, interpret@npm:^1.2.0": version: 1.4.0 resolution: "interpret@npm:1.4.0" checksum: f15725d76206525546f559030ddc967db025c6db904eb8798a70ec3c07e42c5537c5cbc73a15eafd4ae5cdabad35601abf8878261c03dcc8217747e8037575fe @@ -14660,6 +14700,13 @@ fsevents@^1.2.7: languageName: node linkType: hard +"memory-fs@npm:^0.2.0": + version: 0.2.0 + resolution: "memory-fs@npm:0.2.0" + checksum: 373cf2a451883983f904df0074fce05951f92a45f927be32312d192208657d3e0f69688017c1f9571abbc0c554301bc4f925825cb1cd15f558d3a22e02c789d0 + languageName: node + linkType: hard + "memory-fs@npm:^0.4.1": version: 0.4.1 resolution: "memory-fs@npm:0.4.1" @@ -15403,7 +15450,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"node-libs-browser@npm:^2.2.1": +"node-libs-browser@npm:^1.0.0 || ^2.0.0, node-libs-browser@npm:^2.2.1": version: 2.2.1 resolution: "node-libs-browser@npm:2.2.1" dependencies: @@ -19661,7 +19708,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0": +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0, semver@npm:^5.7.1": version: 5.7.1 resolution: "semver@npm:5.7.1" bin: @@ -20939,6 +20986,13 @@ fsevents@^1.2.7: languageName: node linkType: hard +"tapable@npm:^0.1.8": + version: 0.1.10 + resolution: "tapable@npm:0.1.10" + checksum: 5604e1127dbfaa9da431121c947be751e0a91fe21f6256da03b61d1c8c5111b6434806ff751758ec07b810ff2c4e538829aad417e55e6b9b4a73544747eca43e + languageName: node + linkType: hard + "tapable@npm:^1.0.0, tapable@npm:^1.1.3": version: 1.1.3 resolution: "tapable@npm:1.1.3"