mirror of
https://github.com/quine-global/hyper.git
synced 2026-01-12 20:18:41 -09:00
port es5 code to es6
This commit is contained in:
parent
dbaf81b1dd
commit
58804a2d5b
35 changed files with 257 additions and 283 deletions
|
|
@ -1,7 +1,5 @@
|
|||
'use strict';
|
||||
|
||||
const fetch = require('electron-fetch').default;
|
||||
const {EventEmitter} = require('events');
|
||||
import fetch from 'electron-fetch';
|
||||
import {EventEmitter} from 'events';
|
||||
|
||||
class AutoUpdater extends EventEmitter {
|
||||
quitAndInstall() {
|
||||
|
|
@ -47,4 +45,4 @@ class AutoUpdater extends EventEmitter {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports = new AutoUpdater();
|
||||
export default new AutoUpdater();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
const {app, Menu} = require('electron');
|
||||
const {openConfig, getConfig} = require('./config');
|
||||
const {updatePlugins} = require('./plugins');
|
||||
const {installCLI} = require('./utils/cli-install');
|
||||
import {app, Menu} from 'electron';
|
||||
import {openConfig, getConfig} from './config';
|
||||
import {updatePlugins} from './plugins';
|
||||
import {installCLI} from './utils/cli-install';
|
||||
|
||||
const commands = {
|
||||
'window:new': () => {
|
||||
|
|
@ -125,7 +125,7 @@ const commands = {
|
|||
};
|
||||
});
|
||||
|
||||
exports.execCommand = (command, focusedWindow) => {
|
||||
export const execCommand = (command, focusedWindow) => {
|
||||
const fn = commands[command];
|
||||
if (fn) {
|
||||
fn(focusedWindow);
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
const fs = require('fs');
|
||||
const notify = require('./notify');
|
||||
const {_import, getDefaultConfig} = require('./config/import');
|
||||
const _openConfig = require('./config/open');
|
||||
const win = require('./config/windows');
|
||||
const {cfgPath, cfgDir} = require('./config/paths');
|
||||
const {getColorMap} = require('./utils/colors');
|
||||
import fs from 'fs';
|
||||
import notify from './notify';
|
||||
import {_import, getDefaultConfig} from './config/import';
|
||||
import _openConfig from './config/open';
|
||||
import win from './config/windows';
|
||||
import {cfgPath, cfgDir} from './config/paths';
|
||||
import {getColorMap} from './utils/colors';
|
||||
|
||||
const watchers = [];
|
||||
let cfg = {};
|
||||
let _watcher;
|
||||
|
||||
const _watch = function() {
|
||||
const _watch = () => {
|
||||
if (_watcher) {
|
||||
return _watcher;
|
||||
}
|
||||
|
|
@ -63,60 +63,60 @@ const _watch = function() {
|
|||
}
|
||||
};
|
||||
|
||||
exports.subscribe = fn => {
|
||||
export const subscribe = fn => {
|
||||
watchers.push(fn);
|
||||
return () => {
|
||||
watchers.splice(watchers.indexOf(fn), 1);
|
||||
};
|
||||
};
|
||||
|
||||
exports.getConfigDir = () => {
|
||||
export const getConfigDir = () => {
|
||||
// expose config directory to load plugin from the right place
|
||||
return cfgDir;
|
||||
};
|
||||
|
||||
exports.getConfig = () => {
|
||||
export const getConfig = () => {
|
||||
return cfg.config;
|
||||
};
|
||||
|
||||
exports.openConfig = () => {
|
||||
export const openConfig = () => {
|
||||
return _openConfig();
|
||||
};
|
||||
|
||||
exports.getPlugins = () => {
|
||||
export const getPlugins = () => {
|
||||
return {
|
||||
plugins: cfg.plugins,
|
||||
localPlugins: cfg.localPlugins
|
||||
};
|
||||
};
|
||||
|
||||
exports.getKeymaps = () => {
|
||||
export const getKeymaps = () => {
|
||||
return cfg.keymaps;
|
||||
};
|
||||
|
||||
exports.setup = () => {
|
||||
export const setup = () => {
|
||||
cfg = _import();
|
||||
_watch();
|
||||
checkDeprecatedConfig();
|
||||
};
|
||||
|
||||
exports.getWin = win.get;
|
||||
exports.winRecord = win.recordState;
|
||||
exports.windowDefaults = win.defaults;
|
||||
export const getWin = win.get;
|
||||
export const winRecord = win.recordState;
|
||||
export const windowDefaults = win.defaults;
|
||||
|
||||
const getDeprecatedCSS = function(config) {
|
||||
const getDeprecatedCSS = config => {
|
||||
const deprecated = [];
|
||||
const deprecatedCSS = ['x-screen', 'x-row', 'cursor-node', '::selection'];
|
||||
deprecatedCSS.forEach(css => {
|
||||
if ((config.css && config.css.indexOf(css) !== -1) || (config.termCSS && config.termCSS.indexOf(css) !== -1)) {
|
||||
if ((config.css && config.css.includes(css)) || (config.termCSS && config.termCSS.includes(css))) {
|
||||
deprecated.push(css);
|
||||
}
|
||||
});
|
||||
return deprecated;
|
||||
};
|
||||
exports.getDeprecatedCSS = getDeprecatedCSS;
|
||||
export {getDeprecatedCSS};
|
||||
|
||||
const checkDeprecatedConfig = function() {
|
||||
const checkDeprecatedConfig = () => {
|
||||
if (!cfg.config) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -128,7 +128,7 @@ const checkDeprecatedConfig = function() {
|
|||
notify('Configuration warning', `Your configuration uses some deprecated CSS classes (${deprecatedStr})`);
|
||||
};
|
||||
|
||||
exports.fixConfigDefaults = decoratedConfig => {
|
||||
export const fixConfigDefaults = decoratedConfig => {
|
||||
const defaultConfig = getDefaultConfig().config;
|
||||
decoratedConfig.colors = getColorMap(decoratedConfig.colors) || {};
|
||||
// We must have default colors for xterm css.
|
||||
|
|
@ -136,7 +136,7 @@ exports.fixConfigDefaults = decoratedConfig => {
|
|||
return decoratedConfig;
|
||||
};
|
||||
|
||||
exports.htermConfigTranslate = config => {
|
||||
export const htermConfigTranslate = config => {
|
||||
const cssReplacements = {
|
||||
'x-screen x-row([ {.[])': '.xterm-rows > div$1',
|
||||
'.cursor-node([ {.[])': '.terminal-cursor$1',
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
const {moveSync, copySync, existsSync, writeFileSync, readFileSync, lstatSync} = require('fs-extra');
|
||||
const {sync: mkdirpSync} = require('mkdirp');
|
||||
const {defaultCfg, cfgPath, legacyCfgPath, plugs, defaultPlatformKeyPath} = require('./paths');
|
||||
const {_init, _extractDefault} = require('./init');
|
||||
const notify = require('../notify');
|
||||
import {moveSync, copySync, existsSync, writeFileSync, readFileSync, lstatSync} from 'fs-extra';
|
||||
import {sync as mkdirpSync} from 'mkdirp';
|
||||
import {defaultCfg, cfgPath, legacyCfgPath, plugs, defaultPlatformKeyPath} from './paths';
|
||||
import {_init, _extractDefault} from './init';
|
||||
import notify from '../notify';
|
||||
|
||||
let defaultConfig;
|
||||
|
||||
const _write = function(path, data) {
|
||||
const _write = (path, data) => {
|
||||
// This method will take text formatted as Unix line endings and transform it
|
||||
// to text formatted with DOS line endings. We do this because the default
|
||||
// text editor on Windows (notepad) doesn't Deal with LF files. Still. In 2017.
|
||||
const crlfify = function(str) {
|
||||
const crlfify = str => {
|
||||
return str.replace(/\r?\n/g, '\r\n');
|
||||
};
|
||||
const format = process.platform === 'win32' ? crlfify(data.toString()) : data;
|
||||
|
|
@ -23,7 +23,7 @@ const saveAsBackup = src => {
|
|||
let attempt = 1;
|
||||
while (attempt < 100) {
|
||||
try {
|
||||
const backupPath = src + '.backup' + (attempt === 1 ? '' : attempt);
|
||||
const backupPath = `${src}.backup${attempt === 1 ? '' : attempt}`;
|
||||
moveSync(src, backupPath);
|
||||
return backupPath;
|
||||
} catch (e) {
|
||||
|
|
@ -81,7 +81,7 @@ const migrateHyper2Config = () => {
|
|||
);
|
||||
};
|
||||
|
||||
const _importConf = function() {
|
||||
const _importConf = () => {
|
||||
// init plugin directories if not present
|
||||
mkdirpSync(plugs.base);
|
||||
mkdirpSync(plugs.local);
|
||||
|
|
@ -120,14 +120,14 @@ const _importConf = function() {
|
|||
}
|
||||
};
|
||||
|
||||
exports._import = () => {
|
||||
export const _import = () => {
|
||||
const imported = _importConf();
|
||||
defaultConfig = imported.defaultCfg;
|
||||
const result = _init(imported);
|
||||
return result;
|
||||
};
|
||||
|
||||
exports.getDefaultConfig = () => {
|
||||
export const getDefaultConfig = () => {
|
||||
if (!defaultConfig) {
|
||||
defaultConfig = _extractDefault(_importConf().defaultCfg);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
const vm = require('vm');
|
||||
const notify = require('../notify');
|
||||
const mapKeys = require('../utils/map-keys');
|
||||
import vm from 'vm';
|
||||
import notify from '../notify';
|
||||
import mapKeys from '../utils/map-keys';
|
||||
|
||||
const _extract = function(script) {
|
||||
const _extract = script => {
|
||||
const module = {};
|
||||
script.runInNewContext({module});
|
||||
if (!module.exports) {
|
||||
|
|
@ -11,7 +11,7 @@ const _extract = function(script) {
|
|||
return module.exports;
|
||||
};
|
||||
|
||||
const _syntaxValidation = function(cfg) {
|
||||
const _syntaxValidation = cfg => {
|
||||
try {
|
||||
return new vm.Script(cfg, {filename: '.hyper.js', displayErrors: true});
|
||||
} catch (err) {
|
||||
|
|
@ -19,12 +19,12 @@ const _syntaxValidation = function(cfg) {
|
|||
}
|
||||
};
|
||||
|
||||
const _extractDefault = function(cfg) {
|
||||
const _extractDefault = cfg => {
|
||||
return _extract(_syntaxValidation(cfg));
|
||||
};
|
||||
|
||||
// init config
|
||||
const _init = function(cfg) {
|
||||
const _init = cfg => {
|
||||
const script = _syntaxValidation(cfg.userCfg);
|
||||
if (script) {
|
||||
const _cfg = _extract(script);
|
||||
|
|
@ -42,7 +42,4 @@ const _init = function(cfg) {
|
|||
return cfg.defaultCfg;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
_init,
|
||||
_extractDefault
|
||||
};
|
||||
export {_init, _extractDefault};
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
const {shell} = require('electron');
|
||||
const {cfgPath} = require('./paths');
|
||||
|
||||
module.exports = () => Promise.resolve(shell.openItem(cfgPath));
|
||||
import {shell} from 'electron';
|
||||
import {cfgPath} from './paths';
|
||||
export default () => Promise.resolve(shell.openItem(cfgPath));
|
||||
|
||||
// Windows opens .js files with WScript.exe by default
|
||||
// If the user hasn't set up an editor for .js files, we fallback to notepad.
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
// This module exports paths, names, and other metadata that is referenced
|
||||
const {homedir} = require('os');
|
||||
const {app} = require('electron');
|
||||
const {statSync} = require('fs');
|
||||
const {resolve, join} = require('path');
|
||||
const isDev = require('electron-is-dev');
|
||||
import {homedir} from 'os';
|
||||
import {app} from 'electron';
|
||||
import {statSync} from 'fs';
|
||||
import {resolve, join} from 'path';
|
||||
import isDev from 'electron-is-dev';
|
||||
|
||||
const cfgFile = '.hyper.js';
|
||||
const defaultCfgFile = 'config-default.js';
|
||||
|
|
@ -71,7 +71,7 @@ const defaultPlatformKeyPath = () => {
|
|||
}
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
export {
|
||||
cfgDir,
|
||||
cfgPath,
|
||||
legacyCfgPath,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const Config = require('electron-store');
|
||||
import Config from 'electron-store';
|
||||
|
||||
const defaults = {
|
||||
windowPosition: [50, 50],
|
||||
|
|
@ -8,7 +8,7 @@ const defaults = {
|
|||
// local storage
|
||||
const cfg = new Config({defaults});
|
||||
|
||||
module.exports = {
|
||||
export default {
|
||||
defaults,
|
||||
get() {
|
||||
const position = cfg.get('windowPosition');
|
||||
|
|
|
|||
25
app/index.js
25
app/index.js
|
|
@ -1,7 +1,7 @@
|
|||
// Print diagnostic information for a few arguments instead of running Hyper.
|
||||
if (['--help', '-v', '--version'].includes(process.argv[1])) {
|
||||
const {version} = require('./package');
|
||||
const configLocation = process.platform === 'win32' ? process.env.userprofile + '\\.hyper.js' : '~/.hyper.js';
|
||||
const configLocation = process.platform === 'win32' ? `${process.env.userprofile}\\.hyper.js` : '~/.hyper.js';
|
||||
//eslint-disable-next-line no-console
|
||||
console.log(`Hyper version ${version}`);
|
||||
//eslint-disable-next-line no-console
|
||||
|
|
@ -45,23 +45,22 @@ if (process.platform === 'win32') {
|
|||
}
|
||||
|
||||
// Native
|
||||
const {resolve} = require('path');
|
||||
import {resolve} from 'path';
|
||||
|
||||
// Packages
|
||||
const {app, BrowserWindow, Menu} = require('electron');
|
||||
const {gitDescribe} = require('git-describe');
|
||||
const isDev = require('electron-is-dev');
|
||||
|
||||
const config = require('./config');
|
||||
import {app, BrowserWindow, Menu} from 'electron';
|
||||
import {gitDescribe} from 'git-describe';
|
||||
import isDev from 'electron-is-dev';
|
||||
import * as config from './config';
|
||||
|
||||
// set up config
|
||||
config.setup();
|
||||
|
||||
const plugins = require('./plugins');
|
||||
const {installCLI} = require('./utils/cli-install');
|
||||
const AppMenu = require('./menus/menu');
|
||||
const Window = require('./ui/window');
|
||||
const windowUtils = require('./utils/window-utils');
|
||||
import * as plugins from './plugins';
|
||||
import {installCLI} from './utils/cli-install';
|
||||
import * as AppMenu from './menus/menu';
|
||||
import Window from './ui/window';
|
||||
import * as windowUtils from './utils/window-utils';
|
||||
|
||||
const windowSet = new Set([]);
|
||||
|
||||
|
|
@ -100,7 +99,7 @@ if (isDev) {
|
|||
console.log('running in prod mode');
|
||||
}
|
||||
|
||||
const url = 'file://' + resolve(isDev ? __dirname : app.getAppPath(), 'index.html');
|
||||
const url = `file://${resolve(isDev ? __dirname : app.getAppPath(), 'index.html')}`;
|
||||
//eslint-disable-next-line no-console
|
||||
console.log('electron will open', url);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,26 +1,26 @@
|
|||
// Packages
|
||||
const {app, dialog, Menu} = require('electron');
|
||||
import {app, dialog, Menu} from 'electron';
|
||||
|
||||
// Utilities
|
||||
const {getConfig} = require('../config');
|
||||
const {icon} = require('../config/paths');
|
||||
const viewMenu = require('./menus/view');
|
||||
const shellMenu = require('./menus/shell');
|
||||
const editMenu = require('./menus/edit');
|
||||
const pluginsMenu = require('./menus/plugins');
|
||||
const windowMenu = require('./menus/window');
|
||||
const helpMenu = require('./menus/help');
|
||||
const darwinMenu = require('./menus/darwin');
|
||||
const {getDecoratedKeymaps} = require('../plugins');
|
||||
const {execCommand} = require('../commands');
|
||||
const {getRendererTypes} = require('../utils/renderer-utils');
|
||||
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 pluginsMenu from './menus/plugins';
|
||||
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';
|
||||
|
||||
const appName = app.getName();
|
||||
const appVersion = app.getVersion();
|
||||
|
||||
let menu_ = [];
|
||||
|
||||
exports.createMenu = (createWindow, getLoadedPluginVersions) => {
|
||||
export const createMenu = (createWindow, getLoadedPluginVersions) => {
|
||||
const config = getConfig();
|
||||
// We take only first shortcut in array for each command
|
||||
const allCommandKeys = getDecoratedKeymaps();
|
||||
|
|
@ -69,7 +69,7 @@ exports.createMenu = (createWindow, getLoadedPluginVersions) => {
|
|||
return menu;
|
||||
};
|
||||
|
||||
exports.buildMenu = template => {
|
||||
export const buildMenu = template => {
|
||||
menu_ = Menu.buildFromTemplate(template);
|
||||
return menu_;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
// This menu label is overrided by OSX to be the appName
|
||||
// The label is set to appName here so it matches actual behavior
|
||||
const {app} = require('electron');
|
||||
import {app} from 'electron';
|
||||
|
||||
module.exports = (commandKeys, execCommand, showAbout) => {
|
||||
export default (commandKeys, execCommand, showAbout) => {
|
||||
return {
|
||||
label: `${app.getName()}`,
|
||||
submenu: [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
module.exports = (commandKeys, execCommand) => {
|
||||
export default (commandKeys, execCommand) => {
|
||||
const submenu = [
|
||||
{
|
||||
label: 'Undo',
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
const {release} = require('os');
|
||||
const {app, shell} = require('electron');
|
||||
|
||||
const {getConfig, getPlugins} = require('../../config');
|
||||
import {release} from 'os';
|
||||
import {app, shell} from 'electron';
|
||||
import {getConfig, getPlugins} from '../../config';
|
||||
const {arch, env, platform, versions} = process;
|
||||
const {version} = require('../../package.json');
|
||||
import {version} from '../../package.json';
|
||||
|
||||
module.exports = (commands, showAbout) => {
|
||||
export default (commands, showAbout) => {
|
||||
const submenu = [
|
||||
{
|
||||
label: `${app.getName()} Website`,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
module.exports = (commands, execCommand) => {
|
||||
export default (commands, execCommand) => {
|
||||
return {
|
||||
label: 'Plugins',
|
||||
submenu: [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
module.exports = (commandKeys, execCommand) => {
|
||||
export default (commandKeys, execCommand) => {
|
||||
const isMac = process.platform === 'darwin';
|
||||
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
module.exports = (commandKeys, execCommand) => {
|
||||
export default (commandKeys, execCommand) => {
|
||||
return {
|
||||
label: 'View',
|
||||
submenu: [
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
module.exports = (commandKeys, execCommand) => {
|
||||
export default (commandKeys, execCommand) => {
|
||||
// Generating tab:jump array
|
||||
const tabJump = [];
|
||||
for (let i = 1; i <= 9; i++) {
|
||||
// 9 is a special number because it means 'last'
|
||||
const label = i === 9 ? 'Last' : `${i}`;
|
||||
tabJump.push({
|
||||
label: label,
|
||||
label,
|
||||
accelerator: commandKeys[`tab:jump:${label.toLowerCase()}`]
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
const ms = require('ms');
|
||||
const fetch = require('electron-fetch').default;
|
||||
|
||||
const {version} = require('./package');
|
||||
import ms from 'ms';
|
||||
import fetch from 'electron-fetch';
|
||||
import {version} from './package';
|
||||
|
||||
const NEWS_URL = 'https://hyper-news.now.sh';
|
||||
|
||||
module.exports = function fetchNotifications(win) {
|
||||
export default function fetchNotifications(win) {
|
||||
const {rpc} = win;
|
||||
const retry = err => {
|
||||
setTimeout(() => fetchNotifications(win), ms('30m'));
|
||||
|
|
@ -38,4 +37,4 @@ module.exports = function fetchNotifications(win) {
|
|||
retry();
|
||||
})
|
||||
.catch(retry);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
const {resolve} = require('path');
|
||||
|
||||
const {app, BrowserWindow} = require('electron');
|
||||
const isDev = require('electron-is-dev');
|
||||
import {resolve} from 'path';
|
||||
import {app, BrowserWindow} from 'electron';
|
||||
import isDev from 'electron-is-dev';
|
||||
|
||||
let win;
|
||||
|
||||
|
|
@ -19,7 +18,7 @@ app.on('ready', () => {
|
|||
nodeIntegration: true
|
||||
}
|
||||
});
|
||||
const url = 'file://' + resolve(isDev ? __dirname : app.getAppPath(), 'notify.html');
|
||||
const url = `file://${resolve(isDev ? __dirname : app.getAppPath(), 'notify.html')}`;
|
||||
win_.loadURL(url);
|
||||
win_.webContents.on('dom-ready', () => {
|
||||
win = win_;
|
||||
|
|
@ -44,4 +43,4 @@ function notify(title, body, details = {}) {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports = notify;
|
||||
export default notify;
|
||||
|
|
|
|||
|
|
@ -1,18 +1,16 @@
|
|||
const {app, dialog} = require('electron');
|
||||
const {resolve, basename} = require('path');
|
||||
const {writeFileSync} = require('fs');
|
||||
const Config = require('electron-store');
|
||||
const ms = require('ms');
|
||||
|
||||
const React = require('react');
|
||||
const ReactDom = require('react-dom');
|
||||
|
||||
const config = require('./config');
|
||||
const notify = require('./notify');
|
||||
const {availableExtensions} = require('./plugins/extensions');
|
||||
const {install} = require('./plugins/install');
|
||||
const {plugs} = require('./config/paths');
|
||||
const mapKeys = require('./utils/map-keys');
|
||||
import {app, dialog} from 'electron';
|
||||
import {resolve, basename} from 'path';
|
||||
import {writeFileSync} from 'fs';
|
||||
import Config from 'electron-store';
|
||||
import ms from 'ms';
|
||||
import React from 'react';
|
||||
import ReactDom from 'react-dom';
|
||||
import * as config from './config';
|
||||
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';
|
||||
|
||||
// local storage
|
||||
const cache = new Config();
|
||||
|
|
@ -165,9 +163,9 @@ function clearCache() {
|
|||
}
|
||||
}
|
||||
|
||||
exports.updatePlugins = updatePlugins;
|
||||
export {updatePlugins};
|
||||
|
||||
exports.getLoadedPluginVersions = () => {
|
||||
export const getLoadedPluginVersions = () => {
|
||||
return modules.map(mod => ({name: mod._name, version: mod._version}));
|
||||
};
|
||||
|
||||
|
|
@ -239,7 +237,7 @@ function toDependencies(plugins_) {
|
|||
return obj;
|
||||
}
|
||||
|
||||
exports.subscribe = fn => {
|
||||
export const subscribe = fn => {
|
||||
watchers.push(fn);
|
||||
return () => {
|
||||
watchers.splice(watchers.indexOf(fn), 1);
|
||||
|
|
@ -258,10 +256,10 @@ function getPaths() {
|
|||
}
|
||||
|
||||
// expose to renderer
|
||||
exports.getPaths = getPaths;
|
||||
export {getPaths};
|
||||
|
||||
// get paths from renderer
|
||||
exports.getBasePaths = () => {
|
||||
export const getBasePaths = () => {
|
||||
return {path, localPath};
|
||||
};
|
||||
|
||||
|
|
@ -274,7 +272,7 @@ function requirePlugins() {
|
|||
mod = require(path_);
|
||||
const exposed = mod && Object.keys(mod).some(key => availableExtensions.has(key));
|
||||
if (!exposed) {
|
||||
notify('Plugin error!', `Plugin "${basename(path_)}" does not expose any ` + 'Hyper extension API methods');
|
||||
notify('Plugin error!', `${`Plugin "${basename(path_)}" does not expose any `}Hyper extension API methods`);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -306,7 +304,7 @@ function requirePlugins() {
|
|||
.filter(v => Boolean(v));
|
||||
}
|
||||
|
||||
exports.onApp = app_ => {
|
||||
export const onApp = app_ => {
|
||||
modules.forEach(plugin => {
|
||||
if (plugin.onApp) {
|
||||
try {
|
||||
|
|
@ -320,7 +318,7 @@ exports.onApp = app_ => {
|
|||
});
|
||||
};
|
||||
|
||||
exports.onWindowClass = win => {
|
||||
export const onWindowClass = win => {
|
||||
modules.forEach(plugin => {
|
||||
if (plugin.onWindowClass) {
|
||||
try {
|
||||
|
|
@ -334,7 +332,7 @@ exports.onWindowClass = win => {
|
|||
});
|
||||
};
|
||||
|
||||
exports.onWindow = win => {
|
||||
export const onWindow = win => {
|
||||
modules.forEach(plugin => {
|
||||
if (plugin.onWindow) {
|
||||
try {
|
||||
|
|
@ -380,7 +378,7 @@ function decorateClass(base, key) {
|
|||
return decorateEntity(base, key, 'function');
|
||||
}
|
||||
|
||||
exports.getDeprecatedConfig = () => {
|
||||
export const getDeprecatedConfig = () => {
|
||||
const deprecated = {};
|
||||
const baseConfig = config.getConfig();
|
||||
modules.forEach(plugin => {
|
||||
|
|
@ -406,15 +404,15 @@ exports.getDeprecatedConfig = () => {
|
|||
return deprecated;
|
||||
};
|
||||
|
||||
exports.decorateMenu = tpl => {
|
||||
export const decorateMenu = tpl => {
|
||||
return decorateObject(tpl, 'decorateMenu');
|
||||
};
|
||||
|
||||
exports.getDecoratedEnv = baseEnv => {
|
||||
export const getDecoratedEnv = baseEnv => {
|
||||
return decorateObject(baseEnv, 'decorateEnv');
|
||||
};
|
||||
|
||||
exports.getDecoratedConfig = () => {
|
||||
export const getDecoratedConfig = () => {
|
||||
const baseConfig = config.getConfig();
|
||||
const decoratedConfig = decorateObject(baseConfig, 'decorateConfig');
|
||||
const fixedConfig = config.fixConfigDefaults(decoratedConfig);
|
||||
|
|
@ -422,27 +420,27 @@ exports.getDecoratedConfig = () => {
|
|||
return translatedConfig;
|
||||
};
|
||||
|
||||
exports.getDecoratedKeymaps = () => {
|
||||
export const getDecoratedKeymaps = () => {
|
||||
const baseKeymaps = config.getKeymaps();
|
||||
// Ensure that all keys are in an array and don't use deprecated key combination`
|
||||
const decoratedKeymaps = mapKeys(decorateObject(baseKeymaps, 'decorateKeymaps'));
|
||||
return decoratedKeymaps;
|
||||
};
|
||||
|
||||
exports.getDecoratedBrowserOptions = defaults => {
|
||||
export const getDecoratedBrowserOptions = defaults => {
|
||||
return decorateObject(defaults, 'decorateBrowserOptions');
|
||||
};
|
||||
|
||||
exports.decorateWindowClass = defaults => {
|
||||
export const decorateWindowClass = defaults => {
|
||||
return decorateObject(defaults, 'decorateWindowClass');
|
||||
};
|
||||
|
||||
exports.decorateSessionOptions = defaults => {
|
||||
export const decorateSessionOptions = defaults => {
|
||||
return decorateObject(defaults, 'decorateSessionOptions');
|
||||
};
|
||||
|
||||
exports.decorateSessionClass = Session => {
|
||||
export const decorateSessionClass = Session => {
|
||||
return decorateClass(Session, 'decorateSessionClass');
|
||||
};
|
||||
|
||||
exports._toDependencies = toDependencies;
|
||||
export {toDependencies as _toDependencies};
|
||||
|
|
|
|||
|
|
@ -1,44 +1,42 @@
|
|||
module.exports = {
|
||||
availableExtensions: new Set([
|
||||
'onApp',
|
||||
'onWindowClass',
|
||||
'decorateWindowClass',
|
||||
'onWindow',
|
||||
'onRendererWindow',
|
||||
'onUnload',
|
||||
'decorateSessionClass',
|
||||
'decorateSessionOptions',
|
||||
'middleware',
|
||||
'reduceUI',
|
||||
'reduceSessions',
|
||||
'reduceTermGroups',
|
||||
'decorateBrowserOptions',
|
||||
'decorateMenu',
|
||||
'decorateTerm',
|
||||
'decorateHyper',
|
||||
'decorateHyperTerm', // for backwards compatibility with hyperterm
|
||||
'decorateHeader',
|
||||
'decorateTerms',
|
||||
'decorateTab',
|
||||
'decorateNotification',
|
||||
'decorateNotifications',
|
||||
'decorateTabs',
|
||||
'decorateConfig',
|
||||
'decorateKeymaps',
|
||||
'decorateEnv',
|
||||
'decorateTermGroup',
|
||||
'decorateSplitPane',
|
||||
'getTermProps',
|
||||
'getTabProps',
|
||||
'getTabsProps',
|
||||
'getTermGroupProps',
|
||||
'mapHyperTermState',
|
||||
'mapTermsState',
|
||||
'mapHeaderState',
|
||||
'mapNotificationsState',
|
||||
'mapHyperTermDispatch',
|
||||
'mapTermsDispatch',
|
||||
'mapHeaderDispatch',
|
||||
'mapNotificationsDispatch'
|
||||
])
|
||||
};
|
||||
export const availableExtensions = new Set([
|
||||
'onApp',
|
||||
'onWindowClass',
|
||||
'decorateWindowClass',
|
||||
'onWindow',
|
||||
'onRendererWindow',
|
||||
'onUnload',
|
||||
'decorateSessionClass',
|
||||
'decorateSessionOptions',
|
||||
'middleware',
|
||||
'reduceUI',
|
||||
'reduceSessions',
|
||||
'reduceTermGroups',
|
||||
'decorateBrowserOptions',
|
||||
'decorateMenu',
|
||||
'decorateTerm',
|
||||
'decorateHyper',
|
||||
'decorateHyperTerm', // for backwards compatibility with hyperterm
|
||||
'decorateHeader',
|
||||
'decorateTerms',
|
||||
'decorateTab',
|
||||
'decorateNotification',
|
||||
'decorateNotifications',
|
||||
'decorateTabs',
|
||||
'decorateConfig',
|
||||
'decorateKeymaps',
|
||||
'decorateEnv',
|
||||
'decorateTermGroup',
|
||||
'decorateSplitPane',
|
||||
'getTermProps',
|
||||
'getTabProps',
|
||||
'getTabsProps',
|
||||
'getTermGroupProps',
|
||||
'mapHyperTermState',
|
||||
'mapTermsState',
|
||||
'mapHeaderState',
|
||||
'mapNotificationsState',
|
||||
'mapHyperTermDispatch',
|
||||
'mapTermsDispatch',
|
||||
'mapHeaderDispatch',
|
||||
'mapNotificationsDispatch'
|
||||
]);
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
const cp = require('child_process');
|
||||
const queue = require('queue');
|
||||
const ms = require('ms');
|
||||
const {yarn, plugs} = require('../config/paths');
|
||||
import cp from 'child_process';
|
||||
import queue from 'queue';
|
||||
import ms from 'ms';
|
||||
import {yarn, plugs} from '../config/paths';
|
||||
|
||||
module.exports = {
|
||||
export default {
|
||||
install: fn => {
|
||||
const spawnQueue = queue({concurrency: 1});
|
||||
function yarnFn(args, cb) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
const {EventEmitter} = require('events');
|
||||
const {ipcMain} = require('electron');
|
||||
const uuid = require('uuid');
|
||||
import {EventEmitter} from 'events';
|
||||
import {ipcMain} from 'electron';
|
||||
import uuid from 'uuid';
|
||||
|
||||
class Server extends EventEmitter {
|
||||
constructor(win) {
|
||||
|
|
@ -53,6 +53,6 @@ class Server extends EventEmitter {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports = win => {
|
||||
export default win => {
|
||||
return new Server(win);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
const {EventEmitter} = require('events');
|
||||
const {StringDecoder} = require('string_decoder');
|
||||
|
||||
const defaultShell = require('default-shell');
|
||||
|
||||
const {getDecoratedEnv} = require('./plugins');
|
||||
const {productName, version} = require('./package');
|
||||
const config = require('./config');
|
||||
import {EventEmitter} from 'events';
|
||||
import {StringDecoder} from 'string_decoder';
|
||||
import defaultShell from 'default-shell';
|
||||
import {getDecoratedEnv} from './plugins';
|
||||
import {productName, version} from './package';
|
||||
import * as config from './config';
|
||||
|
||||
const createNodePtyError = () =>
|
||||
new Error(
|
||||
|
|
@ -74,7 +72,7 @@ class DataBatcher extends EventEmitter {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports = class Session extends EventEmitter {
|
||||
export default class Session extends EventEmitter {
|
||||
constructor(options) {
|
||||
super();
|
||||
this.pty = null;
|
||||
|
|
@ -90,7 +88,7 @@ module.exports = class Session extends EventEmitter {
|
|||
{},
|
||||
process.env,
|
||||
{
|
||||
LANG: osLocale.sync().replace(/-/, '_') + '.UTF-8',
|
||||
LANG: `${osLocale.sync().replace(/-/, '_')}.UTF-8`,
|
||||
TERM: 'xterm-256color',
|
||||
COLORTERM: 'truecolor',
|
||||
TERM_PROGRAM: productName,
|
||||
|
|
@ -194,4 +192,4 @@ module.exports = class Session extends EventEmitter {
|
|||
this.emit('exit');
|
||||
this.ended = true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const Registry = require('winreg');
|
||||
import Registry from 'winreg';
|
||||
|
||||
const appPath = `"${process.execPath}"`;
|
||||
const regKey = `\\Software\\Classes\\Directory\\background\\shell\\Hyper`;
|
||||
|
|
@ -30,7 +30,7 @@ function addValues(hyperKey, commandKey, callback) {
|
|||
});
|
||||
}
|
||||
|
||||
exports.add = callback => {
|
||||
export const add = callback => {
|
||||
const hyperKey = new Registry({hive: 'HKCU', key: regKey});
|
||||
const commandKey = new Registry({
|
||||
hive: 'HKCU',
|
||||
|
|
@ -78,7 +78,7 @@ exports.add = callback => {
|
|||
});
|
||||
};
|
||||
|
||||
exports.remove = callback => {
|
||||
export const remove = callback => {
|
||||
new Registry({hive: 'HKCU', key: regKey}).destroy(err => {
|
||||
if (err) {
|
||||
//eslint-disable-next-line no-console
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
const editMenu = require('../menus/menus/edit');
|
||||
const shellMenu = require('../menus/menus/shell');
|
||||
const {execCommand} = require('../commands');
|
||||
const {getDecoratedKeymaps} = require('../plugins');
|
||||
import editMenu from '../menus/menus/edit';
|
||||
import shellMenu from '../menus/menus/shell';
|
||||
import {execCommand} from '../commands';
|
||||
import {getDecoratedKeymaps} from '../plugins';
|
||||
const separator = {type: 'separator'};
|
||||
|
||||
const getCommandKeys = keymaps =>
|
||||
|
|
@ -19,7 +19,7 @@ const filterCutCopy = (selection, menuItem) => {
|
|||
return menuItem;
|
||||
};
|
||||
|
||||
module.exports = (createWindow, selection) => {
|
||||
export default (createWindow, selection) => {
|
||||
const commandKeys = getCommandKeys(getDecoratedKeymaps());
|
||||
const _shell = shellMenu(commandKeys, execCommand).submenu;
|
||||
const _edit = editMenu(commandKeys, execCommand).submenu.filter(filterCutCopy.bind(null, selection));
|
||||
|
|
|
|||
|
|
@ -1,22 +1,22 @@
|
|||
const {app, BrowserWindow, shell, Menu} = require('electron');
|
||||
const {isAbsolute} = require('path');
|
||||
const {parse: parseUrl} = require('url');
|
||||
const uuid = require('uuid');
|
||||
const fileUriToPath = require('file-uri-to-path');
|
||||
const isDev = require('electron-is-dev');
|
||||
const updater = require('../updater');
|
||||
const toElectronBackgroundColor = require('../utils/to-electron-background-color');
|
||||
const {icon, cfgDir} = require('../config/paths');
|
||||
const createRPC = require('../rpc');
|
||||
const notify = require('../notify');
|
||||
const fetchNotifications = require('../notifications');
|
||||
const Session = require('../session');
|
||||
const contextMenuTemplate = require('./contextmenu');
|
||||
const {execCommand} = require('../commands');
|
||||
const {setRendererType, unsetRendererType} = require('../utils/renderer-utils');
|
||||
const {decorateSessionOptions, decorateSessionClass} = require('../plugins');
|
||||
import {app, BrowserWindow, shell, Menu} from 'electron';
|
||||
import {isAbsolute} from 'path';
|
||||
import {parse as parseUrl} from 'url';
|
||||
import uuid from 'uuid';
|
||||
import fileUriToPath from 'file-uri-to-path';
|
||||
import isDev from 'electron-is-dev';
|
||||
import updater from '../updater';
|
||||
import toElectronBackgroundColor from '../utils/to-electron-background-color';
|
||||
import {icon, cfgDir} 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';
|
||||
|
||||
module.exports = class Window {
|
||||
export default class Window {
|
||||
constructor(options_, cfg, fn) {
|
||||
const classOpts = Object.assign({uid: uuid.v4()});
|
||||
app.plugins.decorateWindowClass(classOpts);
|
||||
|
|
@ -313,4 +313,4 @@ module.exports = class Window {
|
|||
|
||||
return window;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
// Packages
|
||||
const electron = require('electron');
|
||||
import electron from 'electron';
|
||||
const {app} = electron;
|
||||
const ms = require('ms');
|
||||
const retry = require('async-retry');
|
||||
import ms from 'ms';
|
||||
import retry from 'async-retry';
|
||||
|
||||
// Utilities
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
const {version} = require('./package');
|
||||
const {getDecoratedConfig} = require('./plugins');
|
||||
import {version} from './package';
|
||||
import {getDecoratedConfig} from './plugins';
|
||||
|
||||
const {platform} = process;
|
||||
const isLinux = platform === 'linux';
|
||||
|
|
@ -28,7 +28,7 @@ const isCanary = updateChannel => updateChannel === 'canary';
|
|||
async function init() {
|
||||
autoUpdater.on('error', (err, msg) => {
|
||||
//eslint-disable-next-line no-console
|
||||
console.error('Error fetching updates', msg + ' (' + err.stack + ')');
|
||||
console.error('Error fetching updates', `${msg} (${err.stack})`);
|
||||
});
|
||||
|
||||
const config = await retry(async () => {
|
||||
|
|
@ -61,7 +61,7 @@ async function init() {
|
|||
isInit = true;
|
||||
}
|
||||
|
||||
module.exports = win => {
|
||||
export default win => {
|
||||
if (!isInit) {
|
||||
init();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
const pify = require('pify');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const Registry = require('winreg');
|
||||
|
||||
const notify = require('../notify');
|
||||
|
||||
const {cliScriptPath, cliLinkPath} = require('../config/paths');
|
||||
import pify from 'pify';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import Registry from 'winreg';
|
||||
import notify from '../notify';
|
||||
import {cliScriptPath, cliLinkPath} from '../config/paths';
|
||||
|
||||
const readlink = pify(fs.readlink);
|
||||
const symlink = pify(fs.symlink);
|
||||
|
|
@ -87,7 +85,7 @@ const logNotify = (withNotification, ...args) => {
|
|||
withNotification && notify(...args);
|
||||
};
|
||||
|
||||
exports.installCLI = withNotification => {
|
||||
export const installCLI = withNotification => {
|
||||
if (process.platform === 'win32') {
|
||||
addBinToUserPath()
|
||||
.then(() =>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ const generatePrefixedCommand = (command, shortcuts) => {
|
|||
return result;
|
||||
};
|
||||
|
||||
module.exports = config => {
|
||||
export default config => {
|
||||
return Object.keys(config).reduce((keymap, command) => {
|
||||
if (!command) {
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -12,8 +12,4 @@ function unsetRendererType(uid) {
|
|||
delete rendererTypes[uid];
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getRendererTypes,
|
||||
setRendererType,
|
||||
unsetRendererType
|
||||
};
|
||||
export {getRendererTypes, setRendererType, unsetRendererType};
|
||||
|
|
|
|||
|
|
@ -13,12 +13,8 @@ module.exports = bgColor => {
|
|||
|
||||
// http://stackoverflow.com/a/11019879/1202488
|
||||
const alphaHex = Math.round(color.alpha() * 255).toString(16);
|
||||
return (
|
||||
'#' +
|
||||
alphaHex +
|
||||
color
|
||||
.hex()
|
||||
.toString()
|
||||
.substr(1)
|
||||
);
|
||||
return `#${alphaHex}${color
|
||||
.hex()
|
||||
.toString()
|
||||
.substr(1)}`;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -115,8 +115,8 @@ export default class SplitPane extends React.PureComponent {
|
|||
{React.Children.map(children, (child, i) => {
|
||||
const style = {
|
||||
// flexBasis doesn't work for the first horizontal pane, height need to be specified
|
||||
[sizeProperty]: sizes[i] * 100 + '%',
|
||||
flexBasis: sizes[i] * 100 + '%',
|
||||
[sizeProperty]: `${sizes[i] * 100}%`,
|
||||
flexBasis: `${sizes[i] * 100}%`,
|
||||
flexGrow: 0
|
||||
};
|
||||
return [
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import terms from '../terms';
|
|||
import processClipboard from '../utils/paste';
|
||||
import SearchBox from './searchBox';
|
||||
|
||||
const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].indexOf(navigator.platform) >= 0;
|
||||
const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(navigator.platform);
|
||||
|
||||
// map old hterm constants to xterm.js
|
||||
const CURSOR_STYLES = {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
// Clear selection range of current selected term view
|
||||
// Fix event when terminal text is selected and keyboard action is invoked
|
||||
exports.clear = terminal => {
|
||||
export const clear = terminal => {
|
||||
terminal.document_.getSelection().removeAllRanges();
|
||||
};
|
||||
|
||||
// Use selection extend upon dblclick
|
||||
exports.extend = terminal => {
|
||||
export const extend = terminal => {
|
||||
const sel = terminal.document_.getSelection();
|
||||
|
||||
// Test if focusNode exist and nodeName is #text
|
||||
|
|
@ -19,7 +19,7 @@ exports.extend = terminal => {
|
|||
|
||||
// Fix a bug in ScrollPort selectAll behavior
|
||||
// Select all rows in the viewport
|
||||
exports.all = terminal => {
|
||||
export const all = terminal => {
|
||||
const scrollPort = terminal.scrollPort_;
|
||||
let firstRow;
|
||||
let lastRow;
|
||||
|
|
|
|||
Loading…
Reference in a new issue