diff --git a/.eslintrc.json b/.eslintrc.json index 5b092931..0f9dec0d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -92,7 +92,13 @@ "@typescript-eslint/no-shadow": ["error"], "@typescript-eslint/no-unsafe-assignment": "off", "@typescript-eslint/no-unsafe-member-access": "off", - "@typescript-eslint/restrict-template-expressions": "off" + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/consistent-type-imports": [ + "error", + { + "disallowTypeAnnotations": false + } + ] } }, { diff --git a/app/commands.ts b/app/commands.ts index e285b163..10cb98e4 100644 --- a/app/commands.ts +++ b/app/commands.ts @@ -1,4 +1,5 @@ -import {app, Menu, BrowserWindow} from 'electron'; +import type {BrowserWindow} from 'electron'; +import {app, Menu} from 'electron'; import {openConfig, getConfig} from './config'; import {updatePlugins} from './plugins'; import {installCLI} from './utils/cli-install'; diff --git a/app/config.ts b/app/config.ts index 979a352b..cf112f51 100644 --- a/app/config.ts +++ b/app/config.ts @@ -4,7 +4,7 @@ import {_import, getDefaultConfig} from './config/import'; import _openConfig from './config/open'; import {cfgPath, cfgDir} from './config/paths'; import {getColorMap} from './utils/colors'; -import {parsedConfig, configOptions} from '../lib/config'; +import type {parsedConfig, configOptions} from '../lib/config'; import {app} from 'electron'; const watchers: Function[] = []; diff --git a/app/config/import.ts b/app/config/import.ts index c2c2016f..13821c3b 100644 --- a/app/config/import.ts +++ b/app/config/import.ts @@ -2,7 +2,7 @@ import {readFileSync, mkdirpSync} from 'fs-extra'; import {defaultCfg, cfgPath, plugs, defaultPlatformKeyPath} from './paths'; import {_init} from './init'; import notify from '../notify'; -import {rawConfig} from '../../lib/config'; +import type {rawConfig} from '../../lib/config'; import {migrateHyper3Config} from './migrate'; let defaultConfig: rawConfig; diff --git a/app/config/init.ts b/app/config/init.ts index 96909621..959e9bac 100644 --- a/app/config/init.ts +++ b/app/config/init.ts @@ -1,7 +1,7 @@ import vm from 'vm'; import notify from '../notify'; import mapKeys from '../utils/map-keys'; -import {parsedConfig, rawConfig, configOptions} from '../../lib/config'; +import type {parsedConfig, rawConfig, configOptions} from '../../lib/config'; import _ from 'lodash'; const _extract = (script?: vm.Script): Record => { diff --git a/app/config/windows.ts b/app/config/windows.ts index c18518a7..6c53249d 100644 --- a/app/config/windows.ts +++ b/app/config/windows.ts @@ -1,5 +1,5 @@ import Config from 'electron-store'; -import {BrowserWindow} from 'electron'; +import type {BrowserWindow} from 'electron'; export const defaults = { windowPosition: [50, 50] as [number, number], diff --git a/app/menus/menu.ts b/app/menus/menu.ts index dc2f3c61..45c3e09c 100644 --- a/app/menus/menu.ts +++ b/app/menus/menu.ts @@ -1,5 +1,6 @@ // Packages -import {app, dialog, Menu, BrowserWindow} from 'electron'; +import type {BrowserWindow} from 'electron'; +import {app, dialog, Menu} from 'electron'; // Utilities import {getConfig} from '../config'; diff --git a/app/menus/menus/darwin.ts b/app/menus/menus/darwin.ts index 1a1376d6..cd7d793a 100644 --- a/app/menus/menus/darwin.ts +++ b/app/menus/menus/darwin.ts @@ -1,6 +1,7 @@ // This menu label is overrided by OSX to be the appName // The label is set to appName here so it matches actual behavior -import {app, BrowserWindow, MenuItemConstructorOptions} from 'electron'; +import type {BrowserWindow, MenuItemConstructorOptions} from 'electron'; +import {app} from 'electron'; export default ( commandKeys: Record, diff --git a/app/menus/menus/edit.ts b/app/menus/menus/edit.ts index 46070a87..a56b2e97 100644 --- a/app/menus/menus/edit.ts +++ b/app/menus/menus/edit.ts @@ -1,4 +1,4 @@ -import {BrowserWindow, MenuItemConstructorOptions} from 'electron'; +import type {BrowserWindow, MenuItemConstructorOptions} from 'electron'; export default ( commandKeys: Record, diff --git a/app/menus/menus/help.ts b/app/menus/menus/help.ts index 2dcd7971..a560622e 100644 --- a/app/menus/menus/help.ts +++ b/app/menus/menus/help.ts @@ -1,5 +1,6 @@ import {release} from 'os'; -import {app, shell, MenuItemConstructorOptions, dialog, clipboard} from 'electron'; +import type {MenuItemConstructorOptions} from 'electron'; +import {app, shell, dialog, clipboard} from 'electron'; import {getConfig, getPlugins} from '../../config'; const {arch, env, platform, versions} = process; import {version} from '../../package.json'; diff --git a/app/menus/menus/shell.ts b/app/menus/menus/shell.ts index ec8bde39..c7f5a41b 100644 --- a/app/menus/menus/shell.ts +++ b/app/menus/menus/shell.ts @@ -1,4 +1,4 @@ -import {BrowserWindow, MenuItemConstructorOptions} from 'electron'; +import type {BrowserWindow, MenuItemConstructorOptions} from 'electron'; export default ( commandKeys: Record, diff --git a/app/menus/menus/tools.ts b/app/menus/menus/tools.ts index 843d3d35..83b2463c 100644 --- a/app/menus/menus/tools.ts +++ b/app/menus/menus/tools.ts @@ -1,4 +1,4 @@ -import {BrowserWindow, MenuItemConstructorOptions} from 'electron'; +import type {BrowserWindow, MenuItemConstructorOptions} from 'electron'; export default ( commands: Record, diff --git a/app/menus/menus/view.ts b/app/menus/menus/view.ts index 98f9ef1e..c21b1ee7 100644 --- a/app/menus/menus/view.ts +++ b/app/menus/menus/view.ts @@ -1,4 +1,4 @@ -import {BrowserWindow, MenuItemConstructorOptions} from 'electron'; +import type {BrowserWindow, MenuItemConstructorOptions} from 'electron'; export default ( commandKeys: Record, diff --git a/app/menus/menus/window.ts b/app/menus/menus/window.ts index 4f693bda..8779c8fe 100644 --- a/app/menus/menus/window.ts +++ b/app/menus/menus/window.ts @@ -1,4 +1,4 @@ -import {BrowserWindow, MenuItemConstructorOptions} from 'electron'; +import type {BrowserWindow, MenuItemConstructorOptions} from 'electron'; export default ( commandKeys: Record, diff --git a/app/notifications.ts b/app/notifications.ts index e82e5fb6..4ed9bf02 100644 --- a/app/notifications.ts +++ b/app/notifications.ts @@ -1,7 +1,7 @@ import ms from 'ms'; import fetch from 'electron-fetch'; import {version} from './package.json'; -import {BrowserWindow} from 'electron'; +import type {BrowserWindow} from 'electron'; const NEWS_URL = 'https://hyper-news.now.sh'; diff --git a/app/plugins.ts b/app/plugins.ts index c5905352..d153ba6f 100644 --- a/app/plugins.ts +++ b/app/plugins.ts @@ -1,7 +1,8 @@ /* eslint-disable eslint-comments/disable-enable-pair */ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-unsafe-call */ -import {app, dialog, BrowserWindow, App, ipcMain as _ipcMain, MenuItemConstructorOptions} from 'electron'; +import type {BrowserWindow, App, MenuItemConstructorOptions} from 'electron'; +import {app, dialog, ipcMain as _ipcMain} from 'electron'; import {resolve, basename} from 'path'; import {writeFileSync} from 'fs'; import Config from 'electron-store'; @@ -14,10 +15,10 @@ import {availableExtensions} from './plugins/extensions'; import {install} from './plugins/install'; import {plugs} from './config/paths'; import mapKeys from './utils/map-keys'; -import {configOptions} from '../lib/config'; +import type {configOptions} from '../lib/config'; import {promisify} from 'util'; import {exec, execFile} from 'child_process'; -import {IpcMainWithCommands} from '../common'; +import type {IpcMainWithCommands} from '../common'; // local storage const cache = new Config(); diff --git a/app/rpc.ts b/app/rpc.ts index 656fcca7..13f41e67 100644 --- a/app/rpc.ts +++ b/app/rpc.ts @@ -1,7 +1,8 @@ import {EventEmitter} from 'events'; -import {ipcMain, BrowserWindow, IpcMainEvent} from 'electron'; +import type {BrowserWindow, IpcMainEvent} from 'electron'; +import {ipcMain} from 'electron'; import {v4 as uuidv4} from 'uuid'; -import {TypedEmitter, MainEvents, RendererEvents, FilterNever} from '../common'; +import type {TypedEmitter, MainEvents, RendererEvents, FilterNever} from '../common'; export class Server { emitter: TypedEmitter; diff --git a/app/session.ts b/app/session.ts index 5c0759f4..ce54321c 100644 --- a/app/session.ts +++ b/app/session.ts @@ -4,7 +4,7 @@ import defaultShell from 'default-shell'; import {getDecoratedEnv} from './plugins'; import {productName, version} from './package.json'; import * as config from './config'; -import {IPty, IWindowsPtyForkOptions, spawn as npSpawn} from 'node-pty'; +import type {IPty, IWindowsPtyForkOptions, spawn as npSpawn} from 'node-pty'; import {cliScriptPath} from './config/paths'; import {dirname} from 'path'; import shellEnv from 'shell-env'; diff --git a/app/ui/contextmenu.ts b/app/ui/contextmenu.ts index f6819811..7a082480 100644 --- a/app/ui/contextmenu.ts +++ b/app/ui/contextmenu.ts @@ -2,7 +2,7 @@ import editMenu from '../menus/menus/edit'; import shellMenu from '../menus/menus/shell'; import {execCommand} from '../commands'; import {getDecoratedKeymaps} from '../plugins'; -import {MenuItemConstructorOptions, BrowserWindow} from 'electron'; +import type {MenuItemConstructorOptions, BrowserWindow} from 'electron'; const separator: MenuItemConstructorOptions = {type: 'separator'}; const getCommandKeys = (keymaps: Record): Record => diff --git a/app/ui/window.ts b/app/ui/window.ts index b263bc80..95be52e4 100644 --- a/app/ui/window.ts +++ b/app/ui/window.ts @@ -1,4 +1,5 @@ -import {app, BrowserWindow, shell, Menu, BrowserWindowConstructorOptions} from 'electron'; +import type {BrowserWindowConstructorOptions} from 'electron'; +import {app, BrowserWindow, shell, Menu} from 'electron'; import {isAbsolute, normalize, sep} from 'path'; import {URL, fileURLToPath} from 'url'; import {v4 as uuidv4} from 'uuid'; @@ -15,7 +16,7 @@ import {execCommand} from '../commands'; import {setRendererType, unsetRendererType} from '../utils/renderer-utils'; import {decorateSessionOptions, decorateSessionClass} from '../plugins'; import {enable as remoteEnable} from '@electron/remote/main'; -import {configOptions} from '../../lib/config'; +import type {configOptions} from '../../lib/config'; import {getWorkingDirectoryFromPID} from 'native-process-working-directory'; import {existsSync} from 'fs'; diff --git a/app/updater.ts b/app/updater.ts index 11f17d8e..dc3ee6fd 100644 --- a/app/updater.ts +++ b/app/updater.ts @@ -1,5 +1,6 @@ // Packages -import electron, {app, BrowserWindow, AutoUpdater} from 'electron'; +import type {BrowserWindow, AutoUpdater} from 'electron'; +import electron, {app} from 'electron'; import ms from 'ms'; import retry from 'async-retry'; diff --git a/cli/index.ts b/cli/index.ts index 598d4220..bb8d575c 100644 --- a/cli/index.ts +++ b/cli/index.ts @@ -1,6 +1,7 @@ // This is a CLI tool, using console is OK /* eslint no-console: 0 */ -import {spawn, exec, SpawnOptions} from 'child_process'; +import type {SpawnOptions} from 'child_process'; +import {spawn, exec} from 'child_process'; import {isAbsolute, resolve} from 'path'; import {existsSync} from 'fs'; import {version} from '../app/package.json'; diff --git a/lib/actions/config.ts b/lib/actions/config.ts index 4c68302e..8acd6511 100644 --- a/lib/actions/config.ts +++ b/lib/actions/config.ts @@ -1,6 +1,6 @@ import {CONFIG_LOAD, CONFIG_RELOAD} from '../constants/config'; -import {HyperActions} from '../hyper'; -import {configOptions} from '../config'; +import type {HyperActions} from '../hyper'; +import type {configOptions} from '../config'; export function loadConfig(config: configOptions): HyperActions { return { diff --git a/lib/actions/header.ts b/lib/actions/header.ts index a13eb50b..e4827977 100644 --- a/lib/actions/header.ts +++ b/lib/actions/header.ts @@ -8,7 +8,7 @@ import { } from '../constants/ui'; import rpc from '../rpc'; import {userExitTermGroup, setActiveGroup} from './term-groups'; -import {HyperDispatch} from '../hyper'; +import type {HyperDispatch} from '../hyper'; export function closeTab(uid: string) { return (dispatch: HyperDispatch) => { diff --git a/lib/actions/index.ts b/lib/actions/index.ts index 68b89fbf..7cef199a 100644 --- a/lib/actions/index.ts +++ b/lib/actions/index.ts @@ -1,6 +1,6 @@ import rpc from '../rpc'; import {INIT} from '../constants'; -import {HyperDispatch} from '../hyper'; +import type {HyperDispatch} from '../hyper'; export default function init() { return (dispatch: HyperDispatch) => { diff --git a/lib/actions/notifications.ts b/lib/actions/notifications.ts index 71a1b9cc..6604bb36 100644 --- a/lib/actions/notifications.ts +++ b/lib/actions/notifications.ts @@ -1,5 +1,5 @@ import {NOTIFICATION_MESSAGE, NOTIFICATION_DISMISS} from '../constants/notifications'; -import {HyperActions} from '../hyper'; +import type {HyperActions} from '../hyper'; export function dismissNotification(id: string): HyperActions { return { diff --git a/lib/actions/sessions.ts b/lib/actions/sessions.ts index 149e6ed7..4f4d6ec0 100644 --- a/lib/actions/sessions.ts +++ b/lib/actions/sessions.ts @@ -15,7 +15,7 @@ import { SESSION_SET_XTERM_TITLE, SESSION_SEARCH } from '../constants/sessions'; -import {HyperState, session, HyperDispatch, HyperActions} from '../hyper'; +import type {HyperState, session, HyperDispatch, HyperActions} from '../hyper'; export function addSession({ uid, diff --git a/lib/actions/term-groups.ts b/lib/actions/term-groups.ts index a519b4a3..db3094f4 100644 --- a/lib/actions/term-groups.ts +++ b/lib/actions/term-groups.ts @@ -10,7 +10,7 @@ import {SESSION_REQUEST} from '../constants/sessions'; import findBySession from '../utils/term-groups'; import {getRootGroups} from '../selectors'; import {setActiveSession, ptyExitSession, userExitSession} from './sessions'; -import {ITermState, ITermGroup, HyperState, HyperDispatch, HyperActions} from '../hyper'; +import type {ITermState, ITermGroup, HyperState, HyperDispatch, HyperActions} from '../hyper'; function requestSplit(direction: 'VERTICAL' | 'HORIZONTAL') { return (activeUid: string | undefined) => diff --git a/lib/actions/ui.ts b/lib/actions/ui.ts index a310b682..5177c617 100644 --- a/lib/actions/ui.ts +++ b/lib/actions/ui.ts @@ -27,9 +27,10 @@ import { } from '../constants/ui'; import {setActiveGroup} from './term-groups'; -import parseUrl from 'parse-url'; -import {HyperState, HyperDispatch, HyperActions, ITermGroups} from '../hyper'; -import {stat, Stats} from 'fs'; +import type parseUrl from 'parse-url'; +import type {HyperState, HyperDispatch, HyperActions, ITermGroups} from '../hyper'; +import type {Stats} from 'fs'; +import {stat} from 'fs'; export function openContextMenu(uid: string, selection: string) { return (dispatch: HyperDispatch, getState: () => HyperState) => { diff --git a/lib/actions/updater.ts b/lib/actions/updater.ts index a69da693..8f116723 100644 --- a/lib/actions/updater.ts +++ b/lib/actions/updater.ts @@ -1,6 +1,6 @@ import {UPDATE_INSTALL, UPDATE_AVAILABLE} from '../constants/updater'; import rpc from '../rpc'; -import {HyperActions} from '../hyper'; +import type {HyperActions} from '../hyper'; export function installUpdate(): HyperActions { return { diff --git a/lib/command-registry.ts b/lib/command-registry.ts index 82f38633..27bbe172 100644 --- a/lib/command-registry.ts +++ b/lib/command-registry.ts @@ -1,5 +1,5 @@ import {require as remoteRequire} from '@electron/remote'; -import {HyperDispatch} from './hyper'; +import type {HyperDispatch} from './hyper'; import {closeSearch} from './actions/sessions'; // TODO: Should be updates to new async API https://medium.com/@nornagon/electrons-remote-module-considered-harmful-70d69500f31 diff --git a/lib/components/header.tsx b/lib/components/header.tsx index faa131fb..e48a3c40 100644 --- a/lib/components/header.tsx +++ b/lib/components/header.tsx @@ -3,7 +3,7 @@ import React from 'react'; import {decorate, getTabsProps} from '../utils/plugins'; import Tabs_ from './tabs'; -import {HeaderProps} from '../hyper'; +import type {HeaderProps} from '../hyper'; const Tabs = decorate(Tabs_, 'Tabs'); diff --git a/lib/components/notification.tsx b/lib/components/notification.tsx index ff5bd4ee..21510a8e 100644 --- a/lib/components/notification.tsx +++ b/lib/components/notification.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import {NotificationProps, NotificationState} from '../hyper'; +import type {NotificationProps, NotificationState} from '../hyper'; export default class Notification extends React.PureComponent { dismissTimer!: NodeJS.Timeout; diff --git a/lib/components/notifications.tsx b/lib/components/notifications.tsx index a5b281ca..da63a70e 100644 --- a/lib/components/notifications.tsx +++ b/lib/components/notifications.tsx @@ -3,7 +3,7 @@ import React from 'react'; import {decorate} from '../utils/plugins'; import Notification_ from './notification'; -import {NotificationsProps} from '../hyper'; +import type {NotificationsProps} from '../hyper'; const Notification = decorate(Notification_, 'Notification'); diff --git a/lib/components/searchBox.tsx b/lib/components/searchBox.tsx index 9fa93b6f..76af472e 100644 --- a/lib/components/searchBox.tsx +++ b/lib/components/searchBox.tsx @@ -1,5 +1,5 @@ import React, {useCallback} from 'react'; -import {SearchBoxProps} from '../hyper'; +import type {SearchBoxProps} from '../hyper'; import {VscArrowUp} from '@react-icons/all-files/vsc/VscArrowUp'; import {VscArrowDown} from '@react-icons/all-files/vsc/VscArrowDown'; import {VscClose} from '@react-icons/all-files/vsc/VscClose'; diff --git a/lib/components/split-pane.tsx b/lib/components/split-pane.tsx index 1ab047d5..6efb9bd8 100644 --- a/lib/components/split-pane.tsx +++ b/lib/components/split-pane.tsx @@ -1,6 +1,6 @@ import React from 'react'; import _ from 'lodash'; -import {SplitPaneProps} from '../hyper'; +import type {SplitPaneProps} from '../hyper'; export default class SplitPane extends React.PureComponent { dragPanePosition!: number; diff --git a/lib/components/style-sheet.tsx b/lib/components/style-sheet.tsx index d1043a18..4cb0fdd3 100644 --- a/lib/components/style-sheet.tsx +++ b/lib/components/style-sheet.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import {StyleSheetProps} from '../hyper'; +import type {StyleSheetProps} from '../hyper'; export default class StyleSheet extends React.PureComponent { render() { diff --git a/lib/components/tab.tsx b/lib/components/tab.tsx index 87421309..4d1a14c3 100644 --- a/lib/components/tab.tsx +++ b/lib/components/tab.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import {TabProps} from '../hyper'; +import type {TabProps} from '../hyper'; export default class Tab extends React.PureComponent { constructor(props: TabProps) { diff --git a/lib/components/tabs.tsx b/lib/components/tabs.tsx index 6055469e..eec52295 100644 --- a/lib/components/tabs.tsx +++ b/lib/components/tabs.tsx @@ -3,7 +3,7 @@ import React from 'react'; import {decorate, getTabProps} from '../utils/plugins'; import Tab_ from './tab'; -import {TabsProps} from '../hyper'; +import type {TabsProps} from '../hyper'; const Tab = decorate(Tab_, 'Tab'); const isMac = /Mac/.test(navigator.userAgent); diff --git a/lib/components/term-group.tsx b/lib/components/term-group.tsx index 9820bfe9..a12c6739 100644 --- a/lib/components/term-group.tsx +++ b/lib/components/term-group.tsx @@ -4,7 +4,7 @@ import {decorate, getTermProps, getTermGroupProps} from '../utils/plugins'; import {resizeTermGroup} from '../actions/term-groups'; import Term_ from './term'; import SplitPane_ from './split-pane'; -import {HyperState, HyperDispatch, TermGroupProps, TermGroupOwnProps} from '../hyper'; +import type {HyperState, HyperDispatch, TermGroupProps, TermGroupOwnProps} from '../hyper'; const Term = decorate(Term_, 'Term'); const SplitPane = decorate(SplitPane_, 'SplitPane'); diff --git a/lib/components/term.tsx b/lib/components/term.tsx index 43d37961..4f9fd432 100644 --- a/lib/components/term.tsx +++ b/lib/components/term.tsx @@ -1,8 +1,10 @@ import React from 'react'; -import {Terminal, ITerminalOptions, IDisposable} from 'xterm'; +import type {ITerminalOptions, IDisposable} from 'xterm'; +import {Terminal} from 'xterm'; import {FitAddon} from 'xterm-addon-fit'; import {WebLinksAddon} from 'xterm-addon-web-links'; -import {SearchAddon, ISearchDecorationOptions} from 'xterm-addon-search'; +import type {ISearchDecorationOptions} from 'xterm-addon-search'; +import {SearchAddon} from 'xterm-addon-search'; import {WebglAddon} from 'xterm-addon-webgl'; import {CanvasAddon} from 'xterm-addon-canvas'; import {LigaturesAddon} from 'xterm-addon-ligatures'; @@ -12,7 +14,7 @@ import Color from 'color'; import terms from '../terms'; import processClipboard from '../utils/paste'; import _SearchBox from './searchBox'; -import {TermProps} from '../hyper'; +import type {TermProps} from '../hyper'; import {pickBy, isEqual} from 'lodash'; import {decorate} from '../utils/plugins'; import 'xterm/css/xterm.css'; diff --git a/lib/components/terms.tsx b/lib/components/terms.tsx index 5c7adb10..cbdfecce 100644 --- a/lib/components/terms.tsx +++ b/lib/components/terms.tsx @@ -3,8 +3,8 @@ import {decorate, getTermGroupProps} from '../utils/plugins'; import {registerCommandHandlers} from '../command-registry'; import TermGroup_ from './term-group'; import StyleSheet_ from './style-sheet'; -import {TermsProps, HyperDispatch} from '../hyper'; -import Term from './term'; +import type {TermsProps, HyperDispatch} from '../hyper'; +import type Term from './term'; import {ObjectTypedKeys} from '../utils/object'; const TermGroup = decorate(TermGroup_, 'TermGroup'); diff --git a/lib/config.d.ts b/lib/config.d.ts index 2aa78028..9669f046 100644 --- a/lib/config.d.ts +++ b/lib/config.d.ts @@ -1,4 +1,4 @@ -import {FontWeight} from 'xterm'; +import type {FontWeight} from 'xterm'; export type ColorMap = { black: string; diff --git a/lib/constants/config.ts b/lib/constants/config.ts index 1b18cfbd..31aff6da 100644 --- a/lib/constants/config.ts +++ b/lib/constants/config.ts @@ -1,4 +1,4 @@ -import {configOptions} from '../config'; +import type {configOptions} from '../config'; export const CONFIG_LOAD = 'CONFIG_LOAD'; export const CONFIG_RELOAD = 'CONFIG_RELOAD'; diff --git a/lib/containers/header.ts b/lib/containers/header.ts index ee27ce35..a9cce107 100644 --- a/lib/containers/header.ts +++ b/lib/containers/header.ts @@ -4,7 +4,7 @@ import Header from '../components/header'; import {closeTab, changeTab, maximize, openHamburgerMenu, unmaximize, minimize, close} from '../actions/header'; import {connect} from '../utils/plugins'; import {getRootGroups} from '../selectors'; -import {HyperState, HyperDispatch, ITab} from '../hyper'; +import type {HyperState, HyperDispatch, ITab} from '../hyper'; const isMac = /Mac/.test(navigator.userAgent); diff --git a/lib/containers/hyper.tsx b/lib/containers/hyper.tsx index cb2606cd..56ca0063 100644 --- a/lib/containers/hyper.tsx +++ b/lib/containers/hyper.tsx @@ -1,5 +1,6 @@ import React from 'react'; -import Mousetrap, {MousetrapInstance} from 'mousetrap'; +import type {MousetrapInstance} from 'mousetrap'; +import Mousetrap from 'mousetrap'; import {connect} from '../utils/plugins'; import * as uiActions from '../actions/ui'; @@ -9,8 +10,8 @@ import stylis from 'stylis'; import {HeaderContainer} from './header'; import TermsContainer from './terms'; import NotificationsContainer from './notifications'; -import {HyperState, HyperProps, HyperDispatch} from '../hyper'; -import Terms from '../components/terms'; +import type {HyperState, HyperProps, HyperDispatch} from '../hyper'; +import type Terms from '../components/terms'; const isMac = /Mac/.test(navigator.userAgent); diff --git a/lib/containers/notifications.ts b/lib/containers/notifications.ts index 28ccc217..8d56d0f8 100644 --- a/lib/containers/notifications.ts +++ b/lib/containers/notifications.ts @@ -2,7 +2,7 @@ import Notifications from '../components/notifications'; import {installUpdate} from '../actions/updater'; import {connect} from '../utils/plugins'; import {dismissNotification} from '../actions/notifications'; -import {HyperState, HyperDispatch} from '../hyper'; +import type {HyperState, HyperDispatch} from '../hyper'; const mapStateToProps = (state: HyperState) => { const {ui} = state; diff --git a/lib/containers/terms.ts b/lib/containers/terms.ts index 409f2c2c..beb3b14a 100644 --- a/lib/containers/terms.ts +++ b/lib/containers/terms.ts @@ -11,7 +11,7 @@ import { import {openContextMenu} from '../actions/ui'; import {getRootGroups} from '../selectors'; -import {HyperState, HyperDispatch} from '../hyper'; +import type {HyperState, HyperDispatch} from '../hyper'; const mapStateToProps = (state: HyperState) => { const {sessions} = state.sessions; diff --git a/lib/hyper.d.ts b/lib/hyper.d.ts index b687a7b2..1d177d48 100644 --- a/lib/hyper.d.ts +++ b/lib/hyper.d.ts @@ -1,5 +1,5 @@ -import {Immutable} from 'seamless-immutable'; -import Client from './utils/rpc'; +import type {Immutable} from 'seamless-immutable'; +import type Client from './utils/rpc'; declare global { interface Window { @@ -38,8 +38,8 @@ export type ITermState = Immutable<{ }>; export type cursorShapes = 'BEAM' | 'UNDERLINE' | 'BLOCK'; -import {FontWeight, IWindowsPty, Terminal} from 'xterm'; -import {ColorMap} from './config'; +import type {FontWeight, IWindowsPty, Terminal} from 'xterm'; +import type {ColorMap} from './config'; export type uiState = Immutable<{ _lastUpdate: number | null; @@ -133,7 +133,7 @@ export type IUiReducer = Reducer; export type ISessionReducer = Reducer; -import {Middleware, Reducer} from 'redux'; +import type {Middleware, Reducer} from 'redux'; export type hyperPlugin = { getTabProps: any; getTabsProps: any; @@ -163,14 +163,14 @@ export type HyperState = { termGroups: ITermState; }; -import {UIActions} from './constants/ui'; -import {ConfigActions} from './constants/config'; -import {SessionActions} from './constants/sessions'; -import {NotificationActions} from './constants/notifications'; -import {UpdateActions} from './constants/updater'; -import {TermGroupActions} from './constants/term-groups'; -import {InitActions} from './constants'; -import {TabActions} from './constants/tabs'; +import type {UIActions} from './constants/ui'; +import type {ConfigActions} from './constants/config'; +import type {SessionActions} from './constants/sessions'; +import type {NotificationActions} from './constants/notifications'; +import type {UpdateActions} from './constants/updater'; +import type {TermGroupActions} from './constants/term-groups'; +import type {InitActions} from './constants'; +import type {TabActions} from './constants/tabs'; export type HyperActions = ( | UIActions @@ -183,10 +183,10 @@ export type HyperActions = ( | TabActions ) & {effect?: () => void}; -import configureStore from './store/configure-store'; +import type configureStore from './store/configure-store'; export type HyperDispatch = ReturnType['dispatch']; -import {ReactChild} from 'react'; +import type {ReactChild} from 'react'; type extensionProps = Partial<{ customChildren: ReactChild | ReactChild[]; customChildrenBefore: ReactChild | ReactChild[]; @@ -194,17 +194,17 @@ type extensionProps = Partial<{ customInnerChildren: ReactChild | ReactChild[]; }>; -import {HeaderConnectedProps} from './containers/header'; +import type {HeaderConnectedProps} from './containers/header'; export type HeaderProps = HeaderConnectedProps & extensionProps; -import {HyperConnectedProps} from './containers/hyper'; +import type {HyperConnectedProps} from './containers/hyper'; export type HyperProps = HyperConnectedProps & extensionProps; -import {NotificationsConnectedProps} from './containers/notifications'; +import type {NotificationsConnectedProps} from './containers/notifications'; export type NotificationsProps = NotificationsConnectedProps & extensionProps; -import Terms from './components/terms'; -import {TermsConnectedProps} from './containers/terms'; +import type Terms from './components/terms'; +import type {TermsConnectedProps} from './containers/terms'; export type TermsProps = TermsConnectedProps & extensionProps & {ref_: (terms: Terms | null) => void}; export type StyleSheetProps = { @@ -262,7 +262,7 @@ export type SplitPaneProps = { sizes?: Immutable | null; }; -import Term from './components/term'; +import type Term from './components/term'; export type TermGroupOwnProps = { cursorAccentColor?: string; @@ -314,7 +314,7 @@ export type TermGroupOwnProps = { | 'imageSupport' >; -import {TermGroupConnectedProps} from './components/term-group'; +import type {TermGroupConnectedProps} from './components/term-group'; export type TermGroupProps = TermGroupConnectedProps & TermGroupOwnProps; export type SearchBoxProps = { @@ -335,8 +335,8 @@ export type SearchBoxProps = { font: string; }; -import {FitAddon} from 'xterm-addon-fit'; -import {SearchAddon} from 'xterm-addon-search'; +import type {FitAddon} from 'xterm-addon-fit'; +import type {SearchAddon} from 'xterm-addon-search'; export type TermProps = { backgroundColor: string; bell: string; diff --git a/lib/index.tsx b/lib/index.tsx index e19b57ae..8035a8e3 100644 --- a/lib/index.tsx +++ b/lib/index.tsx @@ -18,7 +18,7 @@ import {addNotificationMessage} from './actions/notifications'; import {loadConfig, reloadConfig} from './actions/config'; import HyperContainer from './containers/hyper'; import configureStore from './store/configure-store'; -import {configOptions} from './config'; +import type {configOptions} from './config'; // On Linux, the default zoom was somehow changed with Electron 3 (or maybe 2). // Setting zoom factor to 1.2 brings back the normal default size diff --git a/lib/reducers/index.ts b/lib/reducers/index.ts index 95de7d3b..809e5a38 100644 --- a/lib/reducers/index.ts +++ b/lib/reducers/index.ts @@ -1,8 +1,9 @@ -import {combineReducers, Reducer} from 'redux'; +import type {Reducer} from 'redux'; +import {combineReducers} from 'redux'; import ui from './ui'; import sessions from './sessions'; import termGroups from './term-groups'; -import {HyperActions, HyperState} from '../hyper'; +import type {HyperActions, HyperState} from '../hyper'; export default combineReducers({ ui, diff --git a/lib/reducers/sessions.ts b/lib/reducers/sessions.ts index 0cdab94a..c006ad8e 100644 --- a/lib/reducers/sessions.ts +++ b/lib/reducers/sessions.ts @@ -12,7 +12,7 @@ import { SESSION_SET_CWD, SESSION_SEARCH } from '../constants/sessions'; -import {sessionState, session, Mutable, ISessionReducer} from '../hyper'; +import type {sessionState, session, Mutable, ISessionReducer} from '../hyper'; const initialState: sessionState = Immutable>({ sessions: {}, diff --git a/lib/reducers/term-groups.ts b/lib/reducers/term-groups.ts index 3880f7ab..7ce00274 100644 --- a/lib/reducers/term-groups.ts +++ b/lib/reducers/term-groups.ts @@ -1,10 +1,12 @@ import {v4 as uuidv4} from 'uuid'; -import Immutable, {Immutable as ImmutableType} from 'seamless-immutable'; +import type {Immutable as ImmutableType} from 'seamless-immutable'; +import Immutable from 'seamless-immutable'; import {TERM_GROUP_EXIT, TERM_GROUP_RESIZE} from '../constants/term-groups'; -import {SESSION_ADD, SESSION_SET_ACTIVE, SessionAddAction} from '../constants/sessions'; +import type {SessionAddAction} from '../constants/sessions'; +import {SESSION_ADD, SESSION_SET_ACTIVE} from '../constants/sessions'; import findBySession from '../utils/term-groups'; import {decorateTermGroupsReducer} from '../utils/plugins'; -import {ITermGroup, ITermState, ITermGroups, ITermGroupReducer, Mutable} from '../hyper'; +import type {ITermGroup, ITermState, ITermGroups, ITermGroupReducer, Mutable} from '../hyper'; const MIN_SIZE = 0.05; const initialState: ITermState = Immutable>({ diff --git a/lib/reducers/ui.ts b/lib/reducers/ui.ts index 19dc12a3..ec8afa36 100644 --- a/lib/reducers/ui.ts +++ b/lib/reducers/ui.ts @@ -1,4 +1,5 @@ -import Immutable, {Immutable as ImmutableType} from 'seamless-immutable'; +import type {Immutable as ImmutableType} from 'seamless-immutable'; +import Immutable from 'seamless-immutable'; import {decorateUIReducer} from '../utils/plugins'; import {CONFIG_LOAD, CONFIG_RELOAD} from '../constants/config'; import { @@ -21,7 +22,7 @@ import { SESSION_SET_CWD } from '../constants/sessions'; import {UPDATE_AVAILABLE} from '../constants/updater'; -import {uiState, Mutable, IUiReducer} from '../hyper'; +import type {uiState, Mutable, IUiReducer} from '../hyper'; import {release} from 'os'; const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(navigator.platform) || process.platform === 'win32'; diff --git a/lib/selectors.ts b/lib/selectors.ts index 21d98353..77607045 100644 --- a/lib/selectors.ts +++ b/lib/selectors.ts @@ -1,5 +1,5 @@ import {createSelector} from 'reselect'; -import {HyperState} from './hyper'; +import type {HyperState} from './hyper'; const getTermGroups = ({termGroups}: Pick) => termGroups.termGroups; export const getRootGroups = createSelector(getTermGroups, (termGroups) => diff --git a/lib/store/configure-store.dev.ts b/lib/store/configure-store.dev.ts index d5b3a430..78259fb3 100644 --- a/lib/store/configure-store.dev.ts +++ b/lib/store/configure-store.dev.ts @@ -1,11 +1,12 @@ import {createStore, applyMiddleware} from 'redux'; -import _thunk, {ThunkMiddleware} from 'redux-thunk'; +import type {ThunkMiddleware} from 'redux-thunk'; +import _thunk from 'redux-thunk'; import rootReducer from '../reducers/index'; import effects from '../utils/effects'; import * as plugins from '../utils/plugins'; import writeMiddleware from './write-middleware'; import {composeWithDevTools} from 'redux-devtools-extension'; -import {HyperState, HyperActions} from '../hyper'; +import type {HyperState, HyperActions} from '../hyper'; const thunk: ThunkMiddleware = _thunk; export default () => { diff --git a/lib/store/configure-store.prod.ts b/lib/store/configure-store.prod.ts index 994b90fd..057be326 100644 --- a/lib/store/configure-store.prod.ts +++ b/lib/store/configure-store.prod.ts @@ -1,10 +1,11 @@ import {createStore, applyMiddleware} from 'redux'; -import _thunk, {ThunkMiddleware} from 'redux-thunk'; +import type {ThunkMiddleware} from 'redux-thunk'; +import _thunk from 'redux-thunk'; import rootReducer from '../reducers/index'; import effects from '../utils/effects'; import * as plugins from '../utils/plugins'; import writeMiddleware from './write-middleware'; -import {HyperState, HyperActions} from '../hyper'; +import type {HyperState, HyperActions} from '../hyper'; const thunk: ThunkMiddleware = _thunk; export default () => diff --git a/lib/store/write-middleware.ts b/lib/store/write-middleware.ts index 76170a9b..58f7d250 100644 --- a/lib/store/write-middleware.ts +++ b/lib/store/write-middleware.ts @@ -1,6 +1,6 @@ -import {HyperActions, HyperState} from '../hyper'; +import type {HyperActions, HyperState} from '../hyper'; import terms from '../terms'; -import {Dispatch, Middleware} from 'redux'; +import type {Dispatch, Middleware} from 'redux'; // the only side effect we perform from middleware // is to write to the react term instance directly diff --git a/lib/terms.ts b/lib/terms.ts index 242c604f..cedbef69 100644 --- a/lib/terms.ts +++ b/lib/terms.ts @@ -1,4 +1,4 @@ -import Term from './components/term'; +import type Term from './components/term'; // react Term components add themselves // to this object upon mounting / unmounting diff --git a/lib/utils/effects.ts b/lib/utils/effects.ts index 7d5b4039..7d547306 100644 --- a/lib/utils/effects.ts +++ b/lib/utils/effects.ts @@ -1,5 +1,5 @@ -import {Dispatch, Middleware} from 'redux'; -import {HyperActions, HyperState} from '../hyper'; +import type {Dispatch, Middleware} from 'redux'; +import type {HyperActions, HyperState} from '../hyper'; /** * Simple redux middleware that executes * the `effect` field if provided in an action diff --git a/lib/utils/file.ts b/lib/utils/file.ts index 00a01458..ca12af3c 100644 --- a/lib/utils/file.ts +++ b/lib/utils/file.ts @@ -10,7 +10,8 @@ * PR: https://github.com/kevva/executable/pull/10 */ -import fs, {Stats} from 'fs'; +import type {Stats} from 'fs'; +import fs from 'fs'; export function isExecutable(fileStat: Stats): boolean { if (process.platform === 'win32') { diff --git a/lib/utils/plugins.ts b/lib/utils/plugins.ts index 5f7fecab..456bc3f9 100644 --- a/lib/utils/plugins.ts +++ b/lib/utils/plugins.ts @@ -3,17 +3,19 @@ import {require as remoteRequire} from '@electron/remote'; // TODO: Should be updates to new async API https://medium.com/@nornagon/electrons-remote-module-considered-harmful-70d69500f31 -import {connect as reduxConnect, Options} from 'react-redux'; +import type {Options} from 'react-redux'; +import {connect as reduxConnect} from 'react-redux'; import {basename} from 'path'; // patching Module._load // so plugins can `require` them without needing their own version // https://github.com/vercel/hyper/issues/619 -import React, {ComponentType, PureComponent} from 'react'; +import type {ComponentType} from 'react'; +import React, {PureComponent} from 'react'; import ReactDOM from 'react-dom'; import Notification from '../components/notification'; import notify from './notify'; -import { +import type { hyperPlugin, IUiReducer, ISessionReducer, @@ -27,7 +29,7 @@ import { Assignable, HyperActions } from '../hyper'; -import {Dispatch, Middleware} from 'redux'; +import type {Dispatch, Middleware} from 'redux'; import {ObjectTypedKeys} from './object'; import IPCChildProcess from './ipc-child-process'; import ChildProcess from 'child_process'; diff --git a/lib/utils/rpc.ts b/lib/utils/rpc.ts index e7891897..0cc5e364 100644 --- a/lib/utils/rpc.ts +++ b/lib/utils/rpc.ts @@ -1,7 +1,7 @@ import {EventEmitter} from 'events'; -import {IpcRenderer, IpcRendererEvent} from 'electron'; +import type {IpcRenderer, IpcRendererEvent} from 'electron'; import electron from 'electron'; -import {FilterNever, MainEvents, RendererEvents, TypedEmitter} from '../../common'; +import type {FilterNever, MainEvents, RendererEvents, TypedEmitter} from '../../common'; export default class Client { emitter: TypedEmitter; diff --git a/lib/utils/term-groups.ts b/lib/utils/term-groups.ts index 9e3706e1..d95dc3ae 100644 --- a/lib/utils/term-groups.ts +++ b/lib/utils/term-groups.ts @@ -1,4 +1,4 @@ -import {ITermState} from '../hyper'; +import type {ITermState} from '../hyper'; export default function findBySession(termGroupState: ITermState, sessionUid: string) { const {termGroups} = termGroupState; diff --git a/test/index.ts b/test/index.ts index 0e54d7c6..acbcba60 100644 --- a/test/index.ts +++ b/test/index.ts @@ -4,7 +4,8 @@ import fs from 'fs-extra'; // Packages import test from 'ava'; -import {_electron, ElectronApplication} from 'playwright'; +import type {ElectronApplication} from 'playwright'; +import {_electron} from 'playwright'; let app: ElectronApplication;