From 36ff6e9b956134d63a4b1b96a83345f04d3592c9 Mon Sep 17 00:00:00 2001 From: Labhansh Agrawal Date: Tue, 25 Jul 2023 23:00:19 +0530 Subject: [PATCH] sort imports --- .eslintrc.json | 21 +++++++++- app/auto-updater-linux.ts | 3 +- app/commands.ts | 3 +- app/config.ts | 9 +++-- app/config/import.ts | 8 ++-- app/config/init.ts | 6 ++- app/config/migrate.ts | 12 +++--- app/config/open.ts | 9 +++-- app/config/paths.ts | 6 ++- app/config/windows.ts | 3 +- app/index.ts | 26 +++++++------ app/menus/menu.ts | 19 +++++----- app/menus/menus/darwin.ts | 2 +- app/menus/menus/help.ts | 7 +++- app/notifications.ts | 8 ++-- app/notify.ts | 1 + app/plugins.ts | 22 ++++++----- app/plugins/install.ts | 4 +- app/rpc.ts | 5 ++- app/session.ts | 18 +++++---- app/ui/contextmenu.ts | 8 ++-- app/ui/window.ts | 38 ++++++++++--------- app/updater.ts | 9 +++-- app/utils/cli-install.ts | 13 ++++--- cli/api.ts | 4 +- cli/index.ts | 11 ++++-- lib/actions/config.ts | 2 +- lib/actions/header.ts | 5 ++- lib/actions/index.ts | 2 +- lib/actions/sessions.ts | 8 ++-- lib/actions/term-groups.ts | 11 +++--- lib/actions/ui.ts | 24 ++++++------ lib/actions/updater.ts | 2 +- lib/command-registry.ts | 3 +- lib/components/header.tsx | 2 +- lib/components/new-tab.tsx | 4 +- lib/components/notification.tsx | 1 + lib/components/notifications.tsx | 2 +- lib/components/searchBox.tsx | 8 ++-- lib/components/split-pane.tsx | 2 + lib/components/style-sheet.tsx | 1 + lib/components/tab.tsx | 1 + lib/components/tabs.tsx | 4 +- lib/components/term-group.tsx | 11 ++++-- lib/components/term.tsx | 36 ++++++++++-------- lib/components/terms.tsx | 12 +++--- lib/containers/header.ts | 8 ++-- lib/containers/hyper.tsx | 17 +++++---- lib/containers/notifications.ts | 8 ++-- lib/containers/terms.ts | 7 ++-- lib/index.tsx | 24 ++++++------ lib/reducers/index.ts | 8 ++-- lib/reducers/sessions.ts | 3 +- lib/reducers/term-groups.ts | 13 ++++--- lib/reducers/ui.ts | 26 +++++++------ lib/selectors.ts | 1 + lib/store/configure-store.dev.ts | 9 +++-- lib/store/configure-store.prod.ts | 7 +++- lib/store/configure-store.ts | 2 +- lib/store/write-middleware.ts | 3 +- lib/utils/config.ts | 3 +- lib/utils/effects.ts | 1 + lib/utils/file.ts | 2 +- lib/utils/ipc-child-process.ts | 1 + lib/utils/ipc.ts | 1 + lib/utils/paste.ts | 1 + lib/utils/plugins.ts | 30 ++++++++------- lib/utils/rpc.ts | 3 ++ test/index.ts | 4 +- test/unit/cli-api.test.ts | 1 + .../unit/to-electron-background-color.test.ts | 1 + test/unit/window-utils.test.ts | 1 + typings/common.d.ts | 7 +++- typings/hyper.d.ts | 2 + webpack.config.ts | 3 +- 75 files changed, 372 insertions(+), 241 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index aedaa6b6..1fa89a98 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -105,7 +105,26 @@ "lodash/collection-return": "error", "lodash/collection-method-value": "error", "import/no-extraneous-dependencies": "error", - "import/no-anonymous-default-export": "error" + "import/no-anonymous-default-export": "error", + "import/order": [ + "error", + { + "groups": [ + "builtin", + "internal", + "external", + "parent", + "sibling", + "index" + ], + "newlines-between": "always", + "alphabetize": { + "order": "asc", + "orderImportKind": "desc", + "caseInsensitive": true + } + } + ] } }, { diff --git a/app/auto-updater-linux.ts b/app/auto-updater-linux.ts index 16198070..aa95c1d7 100644 --- a/app/auto-updater-linux.ts +++ b/app/auto-updater-linux.ts @@ -1,6 +1,7 @@ -import fetch from 'electron-fetch'; import {EventEmitter} from 'events'; +import fetch from 'electron-fetch'; + class AutoUpdater extends EventEmitter implements Electron.AutoUpdater { updateURL!: string; quitAndInstall() { diff --git a/app/commands.ts b/app/commands.ts index e201355d..469a5a3d 100644 --- a/app/commands.ts +++ b/app/commands.ts @@ -1,5 +1,6 @@ -import type {BrowserWindow} from 'electron'; import {app, Menu} from 'electron'; +import type {BrowserWindow} 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 ae86f53e..b4613d57 100644 --- a/app/config.ts +++ b/app/config.ts @@ -1,11 +1,14 @@ +import {app} from 'electron'; + import chokidar from 'chokidar'; -import notify from './notify'; + +import type {parsedConfig, configOptions} from '../typings/config'; + import {_import, getDefaultConfig} from './config/import'; import _openConfig from './config/open'; import {cfgPath, cfgDir} from './config/paths'; +import notify from './notify'; import {getColorMap} from './utils/colors'; -import type {parsedConfig, configOptions} from '../typings/config'; -import {app} from 'electron'; const watchers: Function[] = []; let cfg: parsedConfig = {} as any; diff --git a/app/config/import.ts b/app/config/import.ts index c6762a73..b9965375 100644 --- a/app/config/import.ts +++ b/app/config/import.ts @@ -1,9 +1,11 @@ import {readFileSync, mkdirpSync} from 'fs-extra'; -import {defaultCfg, cfgPath, plugs, defaultPlatformKeyPath} from './paths'; -import {_init} from './init'; -import notify from '../notify'; + import type {rawConfig} from '../../typings/config'; +import notify from '../notify'; + +import {_init} from './init'; import {migrateHyper3Config} from './migrate'; +import {defaultCfg, cfgPath, plugs, defaultPlatformKeyPath} from './paths'; let defaultConfig: rawConfig; diff --git a/app/config/init.ts b/app/config/init.ts index 2889b42f..2bc89427 100644 --- a/app/config/init.ts +++ b/app/config/init.ts @@ -1,8 +1,10 @@ import vm from 'vm'; + +import merge from 'lodash/merge'; + +import type {parsedConfig, rawConfig, configOptions} from '../../typings/config'; import notify from '../notify'; import mapKeys from '../utils/map-keys'; -import type {parsedConfig, rawConfig, configOptions} from '../../typings/config'; -import merge from 'lodash/merge'; const _extract = (script?: vm.Script): Record => { const module: Record = {}; diff --git a/app/config/migrate.ts b/app/config/migrate.ts index a56b0796..522da1e9 100644 --- a/app/config/migrate.ts +++ b/app/config/migrate.ts @@ -1,14 +1,16 @@ -import {parse, prettyPrint} from 'recast'; -import {builders, namedTypes} from 'ast-types'; -import * as babelParser from 'recast/parsers/babel'; -import {copy, copySync, existsSync, readFileSync, writeFileSync} from 'fs-extra'; import {dirname, resolve} from 'path'; + +import {builders, namedTypes} from 'ast-types'; +import type {ExpressionKind} from 'ast-types/lib/gen/kinds'; +import {copy, copySync, existsSync, readFileSync, writeFileSync} from 'fs-extra'; import merge from 'lodash/merge'; +import {parse, prettyPrint} from 'recast'; +import * as babelParser from 'recast/parsers/babel'; import notify from '../notify'; + import {_extractDefault} from './init'; import {cfgDir, cfgPath, defaultCfg, legacyCfgPath, plugs, schemaFile, schemaPath} from './paths'; -import type {ExpressionKind} from 'ast-types/lib/gen/kinds'; // function to remove all json serializable entries from an array expression function removeElements(node: namedTypes.ArrayExpression): namedTypes.ArrayExpression { diff --git a/app/config/open.ts b/app/config/open.ts index 853b1a59..264c2292 100644 --- a/app/config/open.ts +++ b/app/config/open.ts @@ -1,8 +1,11 @@ -import {shell} from 'electron'; -import {cfgPath} from './paths'; -import * as Registry from 'native-reg'; import {exec} from 'child_process'; +import {shell} from 'electron'; + +import * as Registry from 'native-reg'; + +import {cfgPath} from './paths'; + const getUserChoiceKey = () => { try { // Load FileExts keys for .js files diff --git a/app/config/paths.ts b/app/config/paths.ts index a0b6fa52..6032ddd3 100644 --- a/app/config/paths.ts +++ b/app/config/paths.ts @@ -1,8 +1,10 @@ // This module exports paths, names, and other metadata that is referenced -import {homedir} from 'os'; -import {app} from 'electron'; import {statSync} from 'fs'; +import {homedir} from 'os'; import {resolve, join} from 'path'; + +import {app} from 'electron'; + import isDev from 'electron-is-dev'; const cfgFile = 'hyper.json'; diff --git a/app/config/windows.ts b/app/config/windows.ts index 6c53249d..4cd6d500 100644 --- a/app/config/windows.ts +++ b/app/config/windows.ts @@ -1,6 +1,7 @@ -import Config from 'electron-store'; import type {BrowserWindow} from 'electron'; +import Config from 'electron-store'; + export const defaults = { windowPosition: [50, 50] as [number, number], windowSize: [540, 380] as [number, number] diff --git a/app/index.ts b/app/index.ts index 9ad26c06..84a804a4 100644 --- a/app/index.ts +++ b/app/index.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/order import {cfgPath} from './config/paths'; // Print diagnostic information for a few arguments instead of running Hyper. @@ -11,28 +12,31 @@ if (['--help', '-v', '--version'].includes(process.argv[1])) { } // Enable remote module +// eslint-disable-next-line import/order import {initialize as remoteInitialize} from '@electron/remote/main'; remoteInitialize(); +// set up config +// eslint-disable-next-line import/order +import * as config from './config'; +config.setup(); + // Native import {resolve} from 'path'; // Packages import {app, BrowserWindow, Menu, screen} from 'electron'; -import {gitDescribe} from 'git-describe'; + import isDev from 'electron-is-dev'; -import * as config from './config'; - -// set up config -config.setup(); - -import * as plugins from './plugins'; -import {installCLI} from './utils/cli-install'; -import * as AppMenu from './menus/menu'; -import {newWindow} from './ui/window'; -import * as windowUtils from './utils/window-utils'; +import {gitDescribe} from 'git-describe'; import parseUrl from 'parse-url'; +import * as AppMenu from './menus/menu'; +import * as plugins from './plugins'; +import {newWindow} from './ui/window'; +import {installCLI} from './utils/cli-install'; +import * as windowUtils from './utils/window-utils'; + const windowSet = new Set([]); // expose to plugins diff --git a/app/menus/menu.ts b/app/menus/menu.ts index 93bb95ed..df877e69 100644 --- a/app/menus/menu.ts +++ b/app/menus/menu.ts @@ -1,21 +1,22 @@ // Packages -import type {BrowserWindow} from 'electron'; import {app, dialog, Menu} from 'electron'; +import type {BrowserWindow} from 'electron'; // Utilities +import {execCommand} from '../commands'; import {getConfig} from '../config'; import {icon} from '../config/paths'; -import viewMenu from './menus/view'; -import shellMenu from './menus/shell'; -import editMenu from './menus/edit'; -import toolsMenu from './menus/tools'; -import windowMenu from './menus/window'; -import helpMenu from './menus/help'; -import darwinMenu from './menus/darwin'; import {getDecoratedKeymaps} from '../plugins'; -import {execCommand} from '../commands'; import {getRendererTypes} from '../utils/renderer-utils'; +import darwinMenu from './menus/darwin'; +import editMenu from './menus/edit'; +import helpMenu from './menus/help'; +import shellMenu from './menus/shell'; +import toolsMenu from './menus/tools'; +import viewMenu from './menus/view'; +import windowMenu from './menus/window'; + const appName = app.name; const appVersion = app.getVersion(); diff --git a/app/menus/menus/darwin.ts b/app/menus/menus/darwin.ts index a9fdf614..59e514d1 100644 --- a/app/menus/menus/darwin.ts +++ b/app/menus/menus/darwin.ts @@ -1,7 +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 type {BrowserWindow, MenuItemConstructorOptions} from 'electron'; import {app} from 'electron'; +import type {BrowserWindow, MenuItemConstructorOptions} from 'electron'; const darwinMenu = ( commandKeys: Record, diff --git a/app/menus/menus/help.ts b/app/menus/menus/help.ts index 3239a90b..3c9214c1 100644 --- a/app/menus/menus/help.ts +++ b/app/menus/menus/help.ts @@ -1,10 +1,13 @@ import {release} from 'os'; -import type {MenuItemConstructorOptions} from 'electron'; + import {app, shell, dialog, clipboard} from 'electron'; +import type {MenuItemConstructorOptions} from 'electron'; + import {getConfig, getPlugins} from '../../config'; -const {arch, env, platform, versions} = process; import {version} from '../../package.json'; +const {arch, env, platform, versions} = process; + const helpMenu = (commands: Record, showAbout: () => void): MenuItemConstructorOptions => { const submenu: MenuItemConstructorOptions[] = [ { diff --git a/app/notifications.ts b/app/notifications.ts index 4ed9bf02..1a7abb06 100644 --- a/app/notifications.ts +++ b/app/notifications.ts @@ -1,8 +1,10 @@ -import ms from 'ms'; -import fetch from 'electron-fetch'; -import {version} from './package.json'; import type {BrowserWindow} from 'electron'; +import fetch from 'electron-fetch'; +import ms from 'ms'; + +import {version} from './package.json'; + const NEWS_URL = 'https://hyper-news.now.sh'; export default function fetchNotifications(win: BrowserWindow) { diff --git a/app/notify.ts b/app/notify.ts index a31f0305..ce5544fc 100644 --- a/app/notify.ts +++ b/app/notify.ts @@ -1,4 +1,5 @@ import {app, Notification} from 'electron'; + import {icon} from './config/paths'; export default function notify(title: string, body = '', details: {error?: any} = {}) { diff --git a/app/plugins.ts b/app/plugins.ts index e7f03f41..8e460119 100644 --- a/app/plugins.ts +++ b/app/plugins.ts @@ -1,24 +1,28 @@ /* eslint-disable eslint-comments/disable-enable-pair */ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-unsafe-call */ -import type {BrowserWindow, App, MenuItemConstructorOptions} from 'electron'; -import {app, dialog, ipcMain as _ipcMain} from 'electron'; -import {resolve, basename} from 'path'; +import {exec, execFile} from 'child_process'; import {writeFileSync} from 'fs'; +import {resolve, basename} from 'path'; +import {promisify} from 'util'; + +import {app, dialog, ipcMain as _ipcMain} from 'electron'; +import type {BrowserWindow, App, MenuItemConstructorOptions} from 'electron'; +import React from 'react'; + import Config from 'electron-store'; import ms from 'ms'; -import React from 'react'; import ReactDom from 'react-dom'; + +import type {IpcMainWithCommands} from '../typings/common'; +import type {configOptions} from '../typings/config'; + import * as config from './config'; +import {plugs} from './config/paths'; import notify from './notify'; import {availableExtensions} from './plugins/extensions'; import {install} from './plugins/install'; -import {plugs} from './config/paths'; import mapKeys from './utils/map-keys'; -import type {configOptions} from '../typings/config'; -import {promisify} from 'util'; -import {exec, execFile} from 'child_process'; -import type {IpcMainWithCommands} from '../typings/common'; // local storage const cache = new Config(); diff --git a/app/plugins/install.ts b/app/plugins/install.ts index 61fec231..35ed7245 100644 --- a/app/plugins/install.ts +++ b/app/plugins/install.ts @@ -1,6 +1,8 @@ import cp from 'child_process'; -import queue from 'queue'; + import ms from 'ms'; +import queue from 'queue'; + import {yarn, plugs} from '../config/paths'; export const install = (fn: (err: string | null) => void) => { diff --git a/app/rpc.ts b/app/rpc.ts index 950aaf07..aead6363 100644 --- a/app/rpc.ts +++ b/app/rpc.ts @@ -1,7 +1,10 @@ import {EventEmitter} from 'events'; -import type {BrowserWindow, IpcMainEvent} from 'electron'; + import {ipcMain} from 'electron'; +import type {BrowserWindow, IpcMainEvent} from 'electron'; + import {v4 as uuidv4} from 'uuid'; + import type {TypedEmitter, MainEvents, RendererEvents, FilterNever} from '../typings/common'; export class Server { diff --git a/app/session.ts b/app/session.ts index a8a0f8b1..74d9d72b 100644 --- a/app/session.ts +++ b/app/session.ts @@ -1,14 +1,16 @@ import {EventEmitter} from 'events'; -import {StringDecoder} from 'string_decoder'; -import defaultShell from 'default-shell'; -import {getDecoratedEnv} from './plugins'; -import {productName, version} from './package.json'; -import * as config from './config'; -import type {IPty, IWindowsPtyForkOptions, spawn as npSpawn} from 'node-pty'; -import {cliScriptPath} from './config/paths'; import {dirname} from 'path'; -import shellEnv from 'shell-env'; +import {StringDecoder} from 'string_decoder'; + +import defaultShell from 'default-shell'; +import type {IPty, IWindowsPtyForkOptions, spawn as npSpawn} from 'node-pty'; import osLocale from 'os-locale'; +import shellEnv from 'shell-env'; + +import * as config from './config'; +import {cliScriptPath} from './config/paths'; +import {productName, version} from './package.json'; +import {getDecoratedEnv} from './plugins'; const createNodePtyError = () => new Error( diff --git a/app/ui/contextmenu.ts b/app/ui/contextmenu.ts index b5d99d0f..634ea882 100644 --- a/app/ui/contextmenu.ts +++ b/app/ui/contextmenu.ts @@ -1,9 +1,11 @@ +import type {MenuItemConstructorOptions, BrowserWindow} from 'electron'; + +import {execCommand} from '../commands'; +import {getProfiles} from '../config'; import editMenu from '../menus/menus/edit'; import shellMenu from '../menus/menus/shell'; -import {execCommand} from '../commands'; import {getDecoratedKeymaps} from '../plugins'; -import type {MenuItemConstructorOptions, BrowserWindow} from 'electron'; -import {getProfiles} from '../config'; + const separator: MenuItemConstructorOptions = {type: 'separator'}; const getCommandKeys = (keymaps: Record): Record => diff --git a/app/ui/window.ts b/app/ui/window.ts index 0b0ebeab..87eba6d7 100644 --- a/app/ui/window.ts +++ b/app/ui/window.ts @@ -1,26 +1,30 @@ -import type {BrowserWindowConstructorOptions} from 'electron'; -import {app, BrowserWindow, shell, Menu} from 'electron'; +import {existsSync} from 'fs'; import {isAbsolute, normalize, sep} from 'path'; import {URL, fileURLToPath} from 'url'; -import {v4 as uuidv4} from 'uuid'; -import isDev from 'electron-is-dev'; -import updater from '../updater'; -import toElectronBackgroundColor from '../utils/to-electron-background-color'; -import {icon, homeDirectory} from '../config/paths'; -import createRPC from '../rpc'; -import notify from '../notify'; -import fetchNotifications from '../notifications'; -import Session from '../session'; -import contextMenuTemplate from './contextmenu'; -import {execCommand} from '../commands'; -import {setRendererType, unsetRendererType} from '../utils/renderer-utils'; -import {decorateSessionOptions, decorateSessionClass} from '../plugins'; + +import {app, BrowserWindow, shell, Menu} from 'electron'; +import type {BrowserWindowConstructorOptions} from 'electron'; + import {enable as remoteEnable} from '@electron/remote/main'; -import type {configOptions} from '../../typings/config'; +import isDev from 'electron-is-dev'; import {getWorkingDirectoryFromPID} from 'native-process-working-directory'; -import {existsSync} from 'fs'; +import {v4 as uuidv4} from 'uuid'; + import type {sessionExtraOptions} from '../../typings/common'; +import type {configOptions} from '../../typings/config'; +import {execCommand} from '../commands'; import {getDefaultProfile} from '../config'; +import {icon, homeDirectory} from '../config/paths'; +import fetchNotifications from '../notifications'; +import notify from '../notify'; +import {decorateSessionOptions, decorateSessionClass} from '../plugins'; +import createRPC from '../rpc'; +import Session from '../session'; +import updater from '../updater'; +import {setRendererType, unsetRendererType} from '../utils/renderer-utils'; +import toElectronBackgroundColor from '../utils/to-electron-background-color'; + +import contextMenuTemplate from './contextmenu'; export function newWindow( options_: BrowserWindowConstructorOptions, diff --git a/app/updater.ts b/app/updater.ts index 541e8b07..c7d07d4d 100644 --- a/app/updater.ts +++ b/app/updater.ts @@ -1,14 +1,15 @@ // Packages -import type {BrowserWindow, AutoUpdater} from 'electron'; import electron, {app} from 'electron'; -import ms from 'ms'; +import type {BrowserWindow, AutoUpdater} from 'electron'; + import retry from 'async-retry'; +import ms from 'ms'; // Utilities -import {version} from './package.json'; -import {getDecoratedConfig} from './plugins'; import autoUpdaterLinux from './auto-updater-linux'; import {getDefaultProfile} from './config'; +import {version} from './package.json'; +import {getDecoratedConfig} from './plugins'; const {platform} = process; const isLinux = platform === 'linux'; diff --git a/app/utils/cli-install.ts b/app/utils/cli-install.ts index 420bde39..3a5b9930 100644 --- a/app/utils/cli-install.ts +++ b/app/utils/cli-install.ts @@ -1,13 +1,16 @@ import {existsSync, readlink, symlink} from 'fs'; import path from 'path'; -import notify from '../notify'; -import {cliScriptPath, cliLinkPath} from '../config/paths'; +import {promisify} from 'util'; + +import {clipboard, dialog} from 'electron'; + +import {mkdirpSync} from 'fs-extra'; import * as Registry from 'native-reg'; import type {ValueType} from 'native-reg'; import sudoPrompt from 'sudo-prompt'; -import {clipboard, dialog} from 'electron'; -import {mkdirpSync} from 'fs-extra'; -import {promisify} from 'util'; + +import {cliScriptPath, cliLinkPath} from '../config/paths'; +import notify from '../notify'; const readLink = promisify(readlink); const symLink = promisify(symlink); diff --git a/cli/api.ts b/cli/api.ts index bc1bafc4..9b4e7e32 100644 --- a/cli/api.ts +++ b/cli/api.ts @@ -2,10 +2,12 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ import fs from 'fs'; import os from 'os'; +import path from 'path'; + import got from 'got'; import registryUrlModule from 'registry-url'; + const registryUrl = registryUrlModule(); -import path from 'path'; // If the user defines XDG_CONFIG_HOME they definitely want their config there, // otherwise use the home directory in linux/mac and userdata in windows diff --git a/cli/index.ts b/cli/index.ts index bb8d575c..86dbc414 100644 --- a/cli/index.ts +++ b/cli/index.ts @@ -1,17 +1,20 @@ // This is a CLI tool, using console is OK /* eslint no-console: 0 */ -import type {SpawnOptions} from 'child_process'; import {spawn, exec} from 'child_process'; -import {isAbsolute, resolve} from 'path'; +import type {SpawnOptions} from 'child_process'; import {existsSync} from 'fs'; -import {version} from '../app/package.json'; +import {isAbsolute, resolve} from 'path'; import {promisify} from 'util'; + import args from 'args'; import chalk from 'chalk'; -import open from 'open'; import _columnify from 'columnify'; import got from 'got'; +import open from 'open'; import ora from 'ora'; + +import {version} from '../app/package.json'; + import * as api from './api'; let commandPromise: Promise | undefined; diff --git a/lib/actions/config.ts b/lib/actions/config.ts index d43235f2..7d1110cd 100644 --- a/lib/actions/config.ts +++ b/lib/actions/config.ts @@ -1,6 +1,6 @@ +import type {configOptions} from '../../typings/config'; import {CONFIG_LOAD, CONFIG_RELOAD} from '../../typings/constants/config'; import type {HyperActions} from '../../typings/hyper'; -import type {configOptions} from '../../typings/config'; export function loadConfig(config: configOptions): HyperActions { return { diff --git a/lib/actions/header.ts b/lib/actions/header.ts index fa638bdf..771efa03 100644 --- a/lib/actions/header.ts +++ b/lib/actions/header.ts @@ -6,9 +6,10 @@ import { UI_WINDOW_MINIMIZE, UI_WINDOW_CLOSE } from '../../typings/constants/ui'; -import rpc from '../rpc'; -import {userExitTermGroup, setActiveGroup} from './term-groups'; import type {HyperDispatch} from '../../typings/hyper'; +import rpc from '../rpc'; + +import {userExitTermGroup, setActiveGroup} from './term-groups'; export function closeTab(uid: string) { return (dispatch: HyperDispatch) => { diff --git a/lib/actions/index.ts b/lib/actions/index.ts index 3749833c..192dd18b 100644 --- a/lib/actions/index.ts +++ b/lib/actions/index.ts @@ -1,6 +1,6 @@ -import rpc from '../rpc'; import {INIT} from '../../typings/constants'; import type {HyperDispatch} from '../../typings/hyper'; +import rpc from '../rpc'; export default function init() { return (dispatch: HyperDispatch) => { diff --git a/lib/actions/sessions.ts b/lib/actions/sessions.ts index 135ac074..4cb53f9d 100644 --- a/lib/actions/sessions.ts +++ b/lib/actions/sessions.ts @@ -1,6 +1,4 @@ -import rpc from '../rpc'; -import {keys} from '../utils/object'; -import findBySession from '../utils/term-groups'; +import type {Session} from '../../typings/common'; import { SESSION_ADD, SESSION_RESIZE, @@ -16,7 +14,9 @@ import { SESSION_SEARCH } from '../../typings/constants/sessions'; import type {HyperState, HyperDispatch, HyperActions} from '../../typings/hyper'; -import type {Session} from '../../typings/common'; +import rpc from '../rpc'; +import {keys} from '../utils/object'; +import findBySession from '../utils/term-groups'; export function addSession({uid, shell, pid, cols = null, rows = null, splitDirection, activeUid, profile}: Session) { return (dispatch: HyperDispatch, getState: () => HyperState) => { diff --git a/lib/actions/term-groups.ts b/lib/actions/term-groups.ts index 44df015c..6beeedd9 100644 --- a/lib/actions/term-groups.ts +++ b/lib/actions/term-groups.ts @@ -1,4 +1,4 @@ -import rpc from '../rpc'; +import {SESSION_REQUEST} from '../../typings/constants/sessions'; import { DIRECTION, TERM_GROUP_RESIZE, @@ -6,11 +6,12 @@ import { TERM_GROUP_EXIT, TERM_GROUP_EXIT_ACTIVE } from '../../typings/constants/term-groups'; -import {SESSION_REQUEST} from '../../typings/constants/sessions'; -import findBySession from '../utils/term-groups'; -import {getRootGroups} from '../selectors'; -import {setActiveSession, ptyExitSession, userExitSession} from './sessions'; import type {ITermState, ITermGroup, HyperState, HyperDispatch, HyperActions} from '../../typings/hyper'; +import rpc from '../rpc'; +import {getRootGroups} from '../selectors'; +import findBySession from '../utils/term-groups'; + +import {setActiveSession, ptyExitSession, userExitSession} from './sessions'; function requestSplit(direction: 'VERTICAL' | 'HORIZONTAL') { return (_activeUid: string | undefined, _profile: string | undefined) => diff --git a/lib/actions/ui.ts b/lib/actions/ui.ts index 25427ae1..92da4cee 100644 --- a/lib/actions/ui.ts +++ b/lib/actions/ui.ts @@ -1,10 +1,9 @@ +import {stat} from 'fs'; +import type {Stats} from 'fs'; + +import type parseUrl from 'parse-url'; import {php_escapeshellcmd as escapeShellCmd} from 'php-escape-shell'; -import {isExecutable} from '../utils/file'; -import {getRootGroups} from '../selectors'; -import findBySession from '../utils/term-groups'; -import notify from '../utils/notify'; -import rpc from '../rpc'; -import {requestSession, sendSessionData, setActiveSession} from './sessions'; + import { UI_FONT_SIZE_SET, UI_FONT_SIZE_INCR, @@ -25,12 +24,15 @@ import { UI_CONTEXTMENU_OPEN, UI_COMMAND_EXEC } from '../../typings/constants/ui'; - -import {setActiveGroup} from './term-groups'; -import type parseUrl from 'parse-url'; import type {HyperState, HyperDispatch, HyperActions, ITermGroups} from '../../typings/hyper'; -import type {Stats} from 'fs'; -import {stat} from 'fs'; +import rpc from '../rpc'; +import {getRootGroups} from '../selectors'; +import {isExecutable} from '../utils/file'; +import notify from '../utils/notify'; +import findBySession from '../utils/term-groups'; + +import {requestSession, sendSessionData, setActiveSession} from './sessions'; +import {setActiveGroup} from './term-groups'; 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 9425462d..45490f7e 100644 --- a/lib/actions/updater.ts +++ b/lib/actions/updater.ts @@ -1,6 +1,6 @@ import {UPDATE_INSTALL, UPDATE_AVAILABLE} from '../../typings/constants/updater'; -import rpc from '../rpc'; import type {HyperActions} from '../../typings/hyper'; +import rpc from '../rpc'; export function installUpdate(): HyperActions { return { diff --git a/lib/command-registry.ts b/lib/command-registry.ts index de0552f1..f72c08c9 100644 --- a/lib/command-registry.ts +++ b/lib/command-registry.ts @@ -1,6 +1,7 @@ -import {ipcRenderer} from './utils/ipc'; import type {HyperDispatch} from '../typings/hyper'; + import {closeSearch} from './actions/sessions'; +import {ipcRenderer} from './utils/ipc'; let commands: Record void> = { 'editor:search-close': (e, dispatch) => { diff --git a/lib/components/header.tsx b/lib/components/header.tsx index bb2a57b7..61525684 100644 --- a/lib/components/header.tsx +++ b/lib/components/header.tsx @@ -1,9 +1,9 @@ import React from 'react'; +import type {HeaderProps} from '../../typings/hyper'; import {decorate, getTabsProps} from '../utils/plugins'; import Tabs_ from './tabs'; -import type {HeaderProps} from '../../typings/hyper'; const Tabs = decorate(Tabs_, 'Tabs'); diff --git a/lib/components/new-tab.tsx b/lib/components/new-tab.tsx index 992420ea..3fe99543 100644 --- a/lib/components/new-tab.tsx +++ b/lib/components/new-tab.tsx @@ -1,8 +1,10 @@ import React, {useRef, useState} from 'react'; + import {VscChevronDown} from '@react-icons/all-files/vsc/VscChevronDown'; -import type {configOptions} from '../../typings/config'; import useClickAway from 'react-use/lib/useClickAway'; +import type {configOptions} from '../../typings/config'; + interface Props { defaultProfile: string; profiles: configOptions['profiles']; diff --git a/lib/components/notification.tsx b/lib/components/notification.tsx index 3cc78f8f..68b7a2df 100644 --- a/lib/components/notification.tsx +++ b/lib/components/notification.tsx @@ -1,4 +1,5 @@ import React, {forwardRef, useEffect, useRef, useState} from 'react'; + import type {NotificationProps} from '../../typings/hyper'; const Notification = forwardRef>((props, ref) => { diff --git a/lib/components/notifications.tsx b/lib/components/notifications.tsx index e70769bc..79e6ede3 100644 --- a/lib/components/notifications.tsx +++ b/lib/components/notifications.tsx @@ -1,9 +1,9 @@ import React, {forwardRef} from 'react'; +import type {NotificationsProps} from '../../typings/hyper'; import {decorate} from '../utils/plugins'; import Notification_ from './notification'; -import type {NotificationsProps} from '../../typings/hyper'; const Notification = decorate(Notification_, 'Notification'); diff --git a/lib/components/searchBox.tsx b/lib/components/searchBox.tsx index fb13878e..430e8cfb 100644 --- a/lib/components/searchBox.tsx +++ b/lib/components/searchBox.tsx @@ -1,13 +1,15 @@ import React, {useCallback, useRef, useEffect, forwardRef} from 'react'; -import type {SearchBoxProps} from '../../typings/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'; +import {VscArrowUp} from '@react-icons/all-files/vsc/VscArrowUp'; import {VscCaseSensitive} from '@react-icons/all-files/vsc/VscCaseSensitive'; +import {VscClose} from '@react-icons/all-files/vsc/VscClose'; import {VscRegex} from '@react-icons/all-files/vsc/VscRegex'; import {VscWholeWord} from '@react-icons/all-files/vsc/VscWholeWord'; import clsx from 'clsx'; +import type {SearchBoxProps} from '../../typings/hyper'; + type SearchButtonColors = { foregroundColor: string; selectionColor: string; diff --git a/lib/components/split-pane.tsx b/lib/components/split-pane.tsx index e8d08241..28a74477 100644 --- a/lib/components/split-pane.tsx +++ b/lib/components/split-pane.tsx @@ -1,5 +1,7 @@ import React from 'react'; + import sum from 'lodash/sum'; + import type {SplitPaneProps} from '../../typings/hyper'; export default class SplitPane extends React.PureComponent< diff --git a/lib/components/style-sheet.tsx b/lib/components/style-sheet.tsx index 26dbba95..86d89424 100644 --- a/lib/components/style-sheet.tsx +++ b/lib/components/style-sheet.tsx @@ -1,4 +1,5 @@ import React, {forwardRef} from 'react'; + import type {StyleSheetProps} from '../../typings/hyper'; const StyleSheet = forwardRef((props, ref) => { diff --git a/lib/components/tab.tsx b/lib/components/tab.tsx index 8a0c6912..c977c039 100644 --- a/lib/components/tab.tsx +++ b/lib/components/tab.tsx @@ -1,4 +1,5 @@ import React, {forwardRef} from 'react'; + import type {TabProps} from '../../typings/hyper'; const Tab = forwardRef((props, ref) => { diff --git a/lib/components/tabs.tsx b/lib/components/tabs.tsx index afa94afb..49043e7d 100644 --- a/lib/components/tabs.tsx +++ b/lib/components/tabs.tsx @@ -1,10 +1,10 @@ import React, {forwardRef} from 'react'; +import type {TabsProps} from '../../typings/hyper'; import {decorate, getTabProps} from '../utils/plugins'; -import Tab_ from './tab'; -import type {TabsProps} from '../../typings/hyper'; import DropdownButton from './new-tab'; +import Tab_ from './tab'; 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 3edd4a71..5e6e66ec 100644 --- a/lib/components/term-group.tsx +++ b/lib/components/term-group.tsx @@ -1,10 +1,13 @@ import React from 'react'; + import {connect} from 'react-redux'; -import {decorate, getTermProps, getTermGroupProps} from '../utils/plugins'; -import {resizeTermGroup} from '../actions/term-groups'; -import Term_ from './term'; -import SplitPane_ from './split-pane'; + import type {HyperState, HyperDispatch, TermGroupProps, TermGroupOwnProps} from '../../typings/hyper'; +import {resizeTermGroup} from '../actions/term-groups'; +import {decorate, getTermProps, getTermGroupProps} from '../utils/plugins'; + +import SplitPane_ from './split-pane'; +import Term_ from './term'; const Term = decorate(Term_, 'Term'); const SplitPane = decorate(SplitPane_, 'SplitPane'); diff --git a/lib/components/term.tsx b/lib/components/term.tsx index 997c9cf1..45c1464c 100644 --- a/lib/components/term.tsx +++ b/lib/components/term.tsx @@ -1,25 +1,29 @@ -import React from 'react'; -import type {ITerminalOptions, IDisposable} from 'xterm'; -import {Terminal} from 'xterm'; -import {FitAddon} from 'xterm-addon-fit'; -import {WebLinksAddon} from 'xterm-addon-web-links'; -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'; -import {Unicode11Addon} from 'xterm-addon-unicode11'; import {clipboard, shell} from 'electron'; +import React from 'react'; + import Color from 'color'; +import isEqual from 'lodash/isEqual'; +import pickBy from 'lodash/pickBy'; +import {Terminal} from 'xterm'; +import type {ITerminalOptions, IDisposable} from 'xterm'; +import {CanvasAddon} from 'xterm-addon-canvas'; +import {FitAddon} from 'xterm-addon-fit'; +import {ImageAddon} from 'xterm-addon-image'; +import {LigaturesAddon} from 'xterm-addon-ligatures'; +import {SearchAddon} from 'xterm-addon-search'; +import type {ISearchDecorationOptions} from 'xterm-addon-search'; +import {Unicode11Addon} from 'xterm-addon-unicode11'; +import {WebLinksAddon} from 'xterm-addon-web-links'; +import {WebglAddon} from 'xterm-addon-webgl'; + +import type {TermProps} from '../../typings/hyper'; import terms from '../terms'; import processClipboard from '../utils/paste'; -import _SearchBox from './searchBox'; -import type {TermProps} from '../../typings/hyper'; -import pickBy from 'lodash/pickBy'; -import isEqual from 'lodash/isEqual'; import {decorate} from '../utils/plugins'; + +import _SearchBox from './searchBox'; + import 'xterm/css/xterm.css'; -import {ImageAddon} from 'xterm-addon-image'; const SearchBox = decorate(_SearchBox, 'SearchBox'); diff --git a/lib/components/terms.tsx b/lib/components/terms.tsx index 7bcd76f2..3774b02d 100644 --- a/lib/components/terms.tsx +++ b/lib/components/terms.tsx @@ -1,11 +1,13 @@ import React from 'react'; -import {decorate, getTermGroupProps} from '../utils/plugins'; -import {registerCommandHandlers} from '../command-registry'; -import TermGroup_ from './term-group'; -import StyleSheet_ from './style-sheet'; + import type {TermsProps, HyperDispatch} from '../../typings/hyper'; -import type Term from './term'; +import {registerCommandHandlers} from '../command-registry'; import {ObjectTypedKeys} from '../utils/object'; +import {decorate, getTermGroupProps} from '../utils/plugins'; + +import StyleSheet_ from './style-sheet'; +import type Term from './term'; +import TermGroup_ from './term-group'; const TermGroup = decorate(TermGroup_, 'TermGroup'); const StyleSheet = decorate(StyleSheet_, 'StyleSheet'); diff --git a/lib/containers/header.ts b/lib/containers/header.ts index a072ded7..c8e4c9bd 100644 --- a/lib/containers/header.ts +++ b/lib/containers/header.ts @@ -1,11 +1,11 @@ import {createSelector} from 'reselect'; -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 type {HyperState, HyperDispatch, ITab} from '../../typings/hyper'; +import {closeTab, changeTab, maximize, openHamburgerMenu, unmaximize, minimize, close} from '../actions/header'; import {requestTermGroup} from '../actions/term-groups'; +import Header from '../components/header'; +import {getRootGroups} from '../selectors'; +import {connect} from '../utils/plugins'; const isMac = /Mac/.test(navigator.userAgent); diff --git a/lib/containers/hyper.tsx b/lib/containers/hyper.tsx index 0dd98166..d53083a9 100644 --- a/lib/containers/hyper.tsx +++ b/lib/containers/hyper.tsx @@ -1,17 +1,18 @@ import React, {forwardRef, useEffect, useRef} from 'react'; -import type {MousetrapInstance} from 'mousetrap'; -import Mousetrap from 'mousetrap'; -import {connect} from '../utils/plugins'; -import * as uiActions from '../actions/ui'; -import {getRegisteredKeys, getCommandHandler, shouldPreventDefault} from '../command-registry'; +import Mousetrap from 'mousetrap'; +import type {MousetrapInstance} from 'mousetrap'; import stylis from 'stylis'; -import {HeaderContainer} from './header'; -import TermsContainer from './terms'; -import NotificationsContainer from './notifications'; import type {HyperState, HyperProps, HyperDispatch} from '../../typings/hyper'; +import * as uiActions from '../actions/ui'; +import {getRegisteredKeys, getCommandHandler, shouldPreventDefault} from '../command-registry'; import type Terms from '../components/terms'; +import {connect} from '../utils/plugins'; + +import {HeaderContainer} from './header'; +import NotificationsContainer from './notifications'; +import TermsContainer from './terms'; const isMac = /Mac/.test(navigator.userAgent); diff --git a/lib/containers/notifications.ts b/lib/containers/notifications.ts index bf584685..9911758f 100644 --- a/lib/containers/notifications.ts +++ b/lib/containers/notifications.ts @@ -1,8 +1,8 @@ -import Notifications from '../components/notifications'; -import {installUpdate} from '../actions/updater'; -import {connect} from '../utils/plugins'; -import {dismissNotification} from '../actions/notifications'; import type {HyperState, HyperDispatch} from '../../typings/hyper'; +import {dismissNotification} from '../actions/notifications'; +import {installUpdate} from '../actions/updater'; +import Notifications from '../components/notifications'; +import {connect} from '../utils/plugins'; const mapStateToProps = (state: HyperState) => { const {ui} = state; diff --git a/lib/containers/terms.ts b/lib/containers/terms.ts index d6e3d67f..7d29543d 100644 --- a/lib/containers/terms.ts +++ b/lib/containers/terms.ts @@ -1,5 +1,4 @@ -import Terms from '../components/terms'; -import {connect} from '../utils/plugins'; +import type {HyperState, HyperDispatch} from '../../typings/hyper'; import { resizeSession, sendSessionData, @@ -8,10 +7,10 @@ import { openSearch, closeSearch } from '../actions/sessions'; - import {openContextMenu} from '../actions/ui'; +import Terms from '../components/terms'; import {getRootGroups} from '../selectors'; -import type {HyperState, HyperDispatch} from '../../typings/hyper'; +import {connect} from '../utils/plugins'; const mapStateToProps = (state: HyperState) => { const {sessions} = state.sessions; diff --git a/lib/index.tsx b/lib/index.tsx index f3df7282..3d62015e 100644 --- a/lib/index.tsx +++ b/lib/index.tsx @@ -1,23 +1,25 @@ import './v8-snapshot-util'; import {webFrame} from 'electron'; -import {Provider} from 'react-redux'; import React from 'react'; -import {createRoot} from 'react-dom/client'; -import rpc from './rpc'; +import {createRoot} from 'react-dom/client'; +import {Provider} from 'react-redux'; + +import type {configOptions} from '../typings/config'; + +import {loadConfig, reloadConfig} from './actions/config'; import init from './actions/index'; -import * as config from './utils/config'; -import * as plugins from './utils/plugins'; -import {getBase64FileData} from './utils/file'; -import * as uiActions from './actions/ui'; -import * as updaterActions from './actions/updater'; +import {addNotificationMessage} from './actions/notifications'; import * as sessionActions from './actions/sessions'; import * as termGroupActions from './actions/term-groups'; -import {addNotificationMessage} from './actions/notifications'; -import {loadConfig, reloadConfig} from './actions/config'; +import * as uiActions from './actions/ui'; +import * as updaterActions from './actions/updater'; import HyperContainer from './containers/hyper'; +import rpc from './rpc'; import configureStore from './store/configure-store'; -import type {configOptions} from '../typings/config'; +import * as config from './utils/config'; +import {getBase64FileData} from './utils/file'; +import * as plugins from './utils/plugins'; // 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 5d817793..48ccf95a 100644 --- a/lib/reducers/index.ts +++ b/lib/reducers/index.ts @@ -1,9 +1,11 @@ -import type {Reducer} from 'redux'; import {combineReducers} from 'redux'; -import ui from './ui'; +import type {Reducer} from 'redux'; + +import type {HyperActions, HyperState} from '../../typings/hyper'; + import sessions from './sessions'; import termGroups from './term-groups'; -import type {HyperActions, HyperState} from '../../typings/hyper'; +import ui from './ui'; export default combineReducers({ ui, diff --git a/lib/reducers/sessions.ts b/lib/reducers/sessions.ts index c463f15e..12c2d404 100644 --- a/lib/reducers/sessions.ts +++ b/lib/reducers/sessions.ts @@ -1,5 +1,5 @@ import Immutable from 'seamless-immutable'; -import {decorateSessionsReducer} from '../utils/plugins'; + import { SESSION_ADD, SESSION_PTY_EXIT, @@ -13,6 +13,7 @@ import { SESSION_SEARCH } from '../../typings/constants/sessions'; import type {sessionState, session, Mutable, ISessionReducer} from '../../typings/hyper'; +import {decorateSessionsReducer} from '../utils/plugins'; const initialState: sessionState = Immutable>({ sessions: {}, diff --git a/lib/reducers/term-groups.ts b/lib/reducers/term-groups.ts index c15b4851..355fc346 100644 --- a/lib/reducers/term-groups.ts +++ b/lib/reducers/term-groups.ts @@ -1,12 +1,13 @@ -import {v4 as uuidv4} from 'uuid'; -import type {Immutable as ImmutableType} from 'seamless-immutable'; import Immutable from 'seamless-immutable'; -import {TERM_GROUP_EXIT, TERM_GROUP_RESIZE} from '../../typings/constants/term-groups'; -import type {SessionAddAction} from '../../typings/constants/sessions'; +import type {Immutable as ImmutableType} from 'seamless-immutable'; +import {v4 as uuidv4} from 'uuid'; + import {SESSION_ADD, SESSION_SET_ACTIVE} from '../../typings/constants/sessions'; -import findBySession from '../utils/term-groups'; -import {decorateTermGroupsReducer} from '../utils/plugins'; +import type {SessionAddAction} from '../../typings/constants/sessions'; +import {TERM_GROUP_EXIT, TERM_GROUP_RESIZE} from '../../typings/constants/term-groups'; import type {ITermGroup, ITermState, ITermGroups, ITermGroupReducer, Mutable} from '../../typings/hyper'; +import {decorateTermGroupsReducer} from '../utils/plugins'; +import findBySession from '../utils/term-groups'; const MIN_SIZE = 0.05; const initialState: ITermState = Immutable>({ diff --git a/lib/reducers/ui.ts b/lib/reducers/ui.ts index 4acf01b1..19a909a1 100644 --- a/lib/reducers/ui.ts +++ b/lib/reducers/ui.ts @@ -1,7 +1,18 @@ -import type {Immutable as ImmutableType} from 'seamless-immutable'; +import {release} from 'os'; + import Immutable from 'seamless-immutable'; -import {decorateUIReducer} from '../utils/plugins'; +import type {Immutable as ImmutableType} from 'seamless-immutable'; + import {CONFIG_LOAD, CONFIG_RELOAD} from '../../typings/constants/config'; +import {NOTIFICATION_MESSAGE, NOTIFICATION_DISMISS} from '../../typings/constants/notifications'; +import { + SESSION_ADD, + SESSION_RESIZE, + SESSION_PTY_DATA, + SESSION_PTY_EXIT, + SESSION_SET_ACTIVE, + SESSION_SET_CWD +} from '../../typings/constants/sessions'; import { UI_FONT_SIZE_SET, UI_FONT_SIZE_RESET, @@ -12,18 +23,9 @@ import { UI_ENTER_FULLSCREEN, UI_LEAVE_FULLSCREEN } from '../../typings/constants/ui'; -import {NOTIFICATION_MESSAGE, NOTIFICATION_DISMISS} from '../../typings/constants/notifications'; -import { - SESSION_ADD, - SESSION_RESIZE, - SESSION_PTY_DATA, - SESSION_PTY_EXIT, - SESSION_SET_ACTIVE, - SESSION_SET_CWD -} from '../../typings/constants/sessions'; import {UPDATE_AVAILABLE} from '../../typings/constants/updater'; import type {uiState, Mutable, IUiReducer} from '../../typings/hyper'; -import {release} from 'os'; +import {decorateUIReducer} from '../utils/plugins'; const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(navigator.platform) || process.platform === 'win32'; diff --git a/lib/selectors.ts b/lib/selectors.ts index bcf0e8a3..8051c13f 100644 --- a/lib/selectors.ts +++ b/lib/selectors.ts @@ -1,4 +1,5 @@ import {createSelector} from 'reselect'; + import type {HyperState} from '../typings/hyper'; const getTermGroups = ({termGroups}: Pick) => termGroups.termGroups; diff --git a/lib/store/configure-store.dev.ts b/lib/store/configure-store.dev.ts index 7bf81051..cdbabec5 100644 --- a/lib/store/configure-store.dev.ts +++ b/lib/store/configure-store.dev.ts @@ -1,12 +1,15 @@ +import {composeWithDevTools} from '@redux-devtools/extension'; import {createStore, applyMiddleware} from 'redux'; -import type {ThunkMiddleware} from 'redux-thunk'; import _thunk from 'redux-thunk'; +import type {ThunkMiddleware} from 'redux-thunk'; + +import type {HyperState, HyperActions} from '../../typings/hyper'; 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 type {HyperState, HyperActions} from '../../typings/hyper'; + const thunk: ThunkMiddleware = _thunk; const configureStoreForDevelopment = () => { diff --git a/lib/store/configure-store.prod.ts b/lib/store/configure-store.prod.ts index 0db5212d..47fadfd4 100644 --- a/lib/store/configure-store.prod.ts +++ b/lib/store/configure-store.prod.ts @@ -1,11 +1,14 @@ import {createStore, applyMiddleware} from 'redux'; -import type {ThunkMiddleware} from 'redux-thunk'; import _thunk from 'redux-thunk'; +import type {ThunkMiddleware} from 'redux-thunk'; + +import type {HyperState, HyperActions} from '../../typings/hyper'; import rootReducer from '../reducers/index'; import effects from '../utils/effects'; import * as plugins from '../utils/plugins'; + import writeMiddleware from './write-middleware'; -import type {HyperState, HyperActions} from '../../typings/hyper'; + const thunk: ThunkMiddleware = _thunk; const configureStoreForProd = () => diff --git a/lib/store/configure-store.ts b/lib/store/configure-store.ts index 73649c49..627082bf 100644 --- a/lib/store/configure-store.ts +++ b/lib/store/configure-store.ts @@ -1,5 +1,5 @@ -import configureStoreForProduction from './configure-store.prod'; import configureStoreForDevelopment from './configure-store.dev'; +import configureStoreForProduction from './configure-store.prod'; const configureStore = () => { if (process.env.NODE_ENV === 'production') { diff --git a/lib/store/write-middleware.ts b/lib/store/write-middleware.ts index c7ecb5b6..1fcc38dd 100644 --- a/lib/store/write-middleware.ts +++ b/lib/store/write-middleware.ts @@ -1,6 +1,7 @@ +import type {Dispatch, Middleware} from 'redux'; + import type {HyperActions, HyperState} from '../../typings/hyper'; import terms from '../terms'; -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/utils/config.ts b/lib/utils/config.ts index 7ed1531b..1220417b 100644 --- a/lib/utils/config.ts +++ b/lib/utils/config.ts @@ -1,7 +1,8 @@ -import {ipcRenderer} from './ipc'; import {require as remoteRequire, getCurrentWindow} from '@electron/remote'; // TODO: Should be updates to new async API https://medium.com/@nornagon/electrons-remote-module-considered-harmful-70d69500f31 +import {ipcRenderer} from './ipc'; + const plugins = remoteRequire('./plugins') as typeof import('../../app/plugins'); Object.defineProperty(window, 'profileName', { diff --git a/lib/utils/effects.ts b/lib/utils/effects.ts index 0e1abb30..f7a3417c 100644 --- a/lib/utils/effects.ts +++ b/lib/utils/effects.ts @@ -1,4 +1,5 @@ import type {Dispatch, Middleware} from 'redux'; + import type {HyperActions, HyperState} from '../../typings/hyper'; /** * Simple redux middleware that executes diff --git a/lib/utils/file.ts b/lib/utils/file.ts index ca12af3c..e0b22a49 100644 --- a/lib/utils/file.ts +++ b/lib/utils/file.ts @@ -10,8 +10,8 @@ * PR: https://github.com/kevva/executable/pull/10 */ -import type {Stats} from 'fs'; import fs from 'fs'; +import type {Stats} from 'fs'; export function isExecutable(fileStat: Stats): boolean { if (process.platform === 'win32') { diff --git a/lib/utils/ipc-child-process.ts b/lib/utils/ipc-child-process.ts index c98d5dba..d41abc65 100644 --- a/lib/utils/ipc-child-process.ts +++ b/lib/utils/ipc-child-process.ts @@ -1,4 +1,5 @@ import type {ExecFileOptions, ExecOptions} from 'child_process'; + import {ipcRenderer} from './ipc'; export function exec(command: string, options: ExecOptions, callback: (..._args: any) => void) { diff --git a/lib/utils/ipc.ts b/lib/utils/ipc.ts index 78a337c7..4cd792b8 100644 --- a/lib/utils/ipc.ts +++ b/lib/utils/ipc.ts @@ -1,4 +1,5 @@ import {ipcRenderer as _ipc} from 'electron'; + import type {IpcRendererWithCommands} from '../../typings/common'; export const ipcRenderer = _ipc as IpcRendererWithCommands; diff --git a/lib/utils/paste.ts b/lib/utils/paste.ts index 51120943..a73181d1 100644 --- a/lib/utils/paste.ts +++ b/lib/utils/paste.ts @@ -1,4 +1,5 @@ import {clipboard} from 'electron'; + import plist from 'plist'; const getPath = (platform: string) => { diff --git a/lib/utils/plugins.ts b/lib/utils/plugins.ts index 8c6e0440..dea23f91 100644 --- a/lib/utils/plugins.ts +++ b/lib/utils/plugins.ts @@ -1,20 +1,18 @@ // eslint-disable-next-line eslint-comments/disable-enable-pair /* eslint-disable @typescript-eslint/no-unsafe-return */ -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 type {ConnectOptions} from 'react-redux/es/components/connect'; -import {connect as reduxConnect} from 'react-redux'; +import ChildProcess from 'child_process'; import pathModule from 'path'; -// patching Module._load -// so plugins can `require` them without needing their own version -// https://github.com/vercel/hyper/issues/619 -import type {ComponentType} from 'react'; import React, {PureComponent} from 'react'; +import type {ComponentType} from 'react'; + +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 ReactDOM from 'react-dom'; -import Notification from '../components/notification'; -import notify from './notify'; +import {connect as reduxConnect} from 'react-redux'; +import type {ConnectOptions} from 'react-redux/es/components/connect'; +import type {Dispatch, Middleware} from 'redux'; + import type { hyperPlugin, IUiReducer, @@ -29,10 +27,11 @@ import type { Assignable, HyperActions } from '../../typings/hyper'; -import type {Dispatch, Middleware} from 'redux'; -import {ObjectTypedKeys} from './object'; +import Notification from '../components/notification'; + import IPCChildProcess from './ipc-child-process'; -import ChildProcess from 'child_process'; +import notify from './notify'; +import {ObjectTypedKeys} from './object'; // remote interface to `../plugins` const plugins = remoteRequire('./plugins') as typeof import('../../app/plugins'); @@ -166,6 +165,9 @@ export function decorate

>( }; } +// patching Module._load +// so plugins can `require` them without needing their own version +// https://github.com/vercel/hyper/issues/619 // eslint-disable-next-line @typescript-eslint/no-var-requires const Module = require('module') as typeof import('module') & {_load: Function}; const originalLoad = Module._load; diff --git a/lib/utils/rpc.ts b/lib/utils/rpc.ts index b547e172..50d55dda 100644 --- a/lib/utils/rpc.ts +++ b/lib/utils/rpc.ts @@ -1,5 +1,7 @@ import {EventEmitter} from 'events'; + import type {IpcRendererEvent} from 'electron'; + import type { FilterNever, IpcRendererWithCommands, @@ -7,6 +9,7 @@ import type { RendererEvents, TypedEmitter } from '../../typings/common'; + import {ipcRenderer} from './ipc'; export default class Client { diff --git a/test/index.ts b/test/index.ts index 96ce20d8..34035634 100644 --- a/test/index.ts +++ b/test/index.ts @@ -1,11 +1,11 @@ // Native import path from 'path'; -import fs from 'fs-extra'; // Packages import test from 'ava'; -import type {ElectronApplication} from 'playwright'; +import fs from 'fs-extra'; import {_electron} from 'playwright'; +import type {ElectronApplication} from 'playwright'; let app: ElectronApplication; diff --git a/test/unit/cli-api.test.ts b/test/unit/cli-api.test.ts index 8fd5cd26..a59394e4 100644 --- a/test/unit/cli-api.test.ts +++ b/test/unit/cli-api.test.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-unsafe-call */ import test from 'ava'; + // eslint-disable-next-line @typescript-eslint/no-var-requires const proxyquire = require('proxyquire').noCallThru(); diff --git a/test/unit/to-electron-background-color.test.ts b/test/unit/to-electron-background-color.test.ts index e7421fc1..f5a54c1c 100644 --- a/test/unit/to-electron-background-color.test.ts +++ b/test/unit/to-electron-background-color.test.ts @@ -1,4 +1,5 @@ import test from 'ava'; + import toElectronBackgroundColor from '../../app/utils/to-electron-background-color'; import {isHexColor} from '../testUtils/is-hex-color'; diff --git a/test/unit/window-utils.test.ts b/test/unit/window-utils.test.ts index 89ce665f..a90e70e1 100644 --- a/test/unit/window-utils.test.ts +++ b/test/unit/window-utils.test.ts @@ -1,6 +1,7 @@ // eslint-disable-next-line eslint-comments/disable-enable-pair /* eslint-disable @typescript-eslint/no-unsafe-call */ import test from 'ava'; + // eslint-disable-next-line @typescript-eslint/no-var-requires const proxyquire = require('proxyquire').noCallThru(); diff --git a/typings/common.d.ts b/typings/common.d.ts index 26ee00a8..5f90f270 100644 --- a/typings/common.d.ts +++ b/typings/common.d.ts @@ -1,6 +1,9 @@ -import type parseUrl from 'parse-url'; -import type {IpcMain, IpcRenderer} from 'electron'; import type {ExecFileOptions, ExecOptions} from 'child_process'; + +import type {IpcMain, IpcRenderer} from 'electron'; + +import type parseUrl from 'parse-url'; + import type {configOptions} from './config'; export type Session = { diff --git a/typings/hyper.d.ts b/typings/hyper.d.ts index 53b221dd..e674e328 100644 --- a/typings/hyper.d.ts +++ b/typings/hyper.d.ts @@ -1,3 +1,5 @@ +// eslint-disable-next-line eslint-comments/disable-enable-pair +/* eslint-disable import/order */ import type {Immutable} from 'seamless-immutable'; import type Client from '../lib/utils/rpc'; diff --git a/webpack.config.ts b/webpack.config.ts index 53576ba7..432b575f 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -1,5 +1,6 @@ -import Copy from 'copy-webpack-plugin'; import path from 'path'; + +import Copy from 'copy-webpack-plugin'; import TerserPlugin from 'terser-webpack-plugin'; import webpack from 'webpack';