mirror of
https://github.com/quine-global/hyper.git
synced 2026-01-18 22:48:41 -09:00
Redirect exec calls from renderer to main process
This commit is contained in:
parent
146d89a3dd
commit
5ec787806f
3 changed files with 75 additions and 1 deletions
|
|
@ -1,7 +1,7 @@
|
|||
/* eslint-disable eslint-comments/disable-enable-pair */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
||||
import {app, dialog, BrowserWindow, App} from 'electron';
|
||||
import {app, dialog, BrowserWindow, App, ipcMain} from 'electron';
|
||||
import {resolve, basename} from 'path';
|
||||
import {writeFileSync} from 'fs';
|
||||
import Config from 'electron-store';
|
||||
|
|
@ -15,6 +15,8 @@ import {install} from './plugins/install';
|
|||
import {plugs} from './config/paths';
|
||||
import mapKeys from './utils/map-keys';
|
||||
import {configOptions} from '../lib/config';
|
||||
import {promisify} from 'util';
|
||||
import {exec, execFile} from 'child_process';
|
||||
|
||||
// local storage
|
||||
const cache = new Config();
|
||||
|
|
@ -449,3 +451,13 @@ export const decorateSessionClass = <T>(Session: T): T => {
|
|||
};
|
||||
|
||||
export {toDependencies as _toDependencies};
|
||||
|
||||
ipcMain.handle('child_process.exec', (event, args) => {
|
||||
const {command, options} = args;
|
||||
return promisify(exec)(command, options);
|
||||
});
|
||||
|
||||
ipcMain.handle('child_process.execFile', (event, _args) => {
|
||||
const {file, args, options} = _args;
|
||||
return promisify(execFile)(file, args, options);
|
||||
});
|
||||
|
|
|
|||
58
lib/utils/ipc-child-process.ts
Normal file
58
lib/utils/ipc-child-process.ts
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
import {ipcRenderer} from 'electron';
|
||||
|
||||
export function exec(command: string, options?: any, callback?: (..._args: any) => void) {
|
||||
if (typeof options === 'function') {
|
||||
callback = options;
|
||||
options = {};
|
||||
}
|
||||
ipcRenderer.invoke('child_process.exec', {command, options}).then(
|
||||
({stdout, stderr}) => callback?.(null, stdout, stderr),
|
||||
(error) => callback?.(error, '', '')
|
||||
);
|
||||
}
|
||||
|
||||
export function execSync() {
|
||||
console.error('Calling execSync from renderer is disabled');
|
||||
}
|
||||
|
||||
export function execFile(file: string, args?: any, options?: any, callback?: (..._args: any) => void) {
|
||||
if (typeof options === 'function') {
|
||||
callback = options;
|
||||
options = null;
|
||||
}
|
||||
if (typeof args === 'function') {
|
||||
callback = args;
|
||||
args = null;
|
||||
options = null;
|
||||
}
|
||||
ipcRenderer.invoke('child_process.execFile', {file, args, options}).then(
|
||||
({stdout, stderr}) => callback?.(null, stdout, stderr),
|
||||
(error) => callback?.(error, '', '')
|
||||
);
|
||||
}
|
||||
|
||||
export function execFileSync() {
|
||||
console.error('Calling execFileSync from renderer is disabled');
|
||||
}
|
||||
|
||||
export function spawn() {
|
||||
console.error('Calling spawn from renderer is disabled');
|
||||
}
|
||||
|
||||
export function spawnSync() {
|
||||
console.error('Calling spawnSync from renderer is disabled');
|
||||
}
|
||||
|
||||
export function fork() {
|
||||
console.error('Calling fork from renderer is disabled');
|
||||
}
|
||||
|
||||
export default {
|
||||
exec,
|
||||
execSync,
|
||||
execFile,
|
||||
execFileSync,
|
||||
spawn,
|
||||
spawnSync,
|
||||
fork
|
||||
};
|
||||
|
|
@ -28,6 +28,8 @@ import {
|
|||
} from '../hyper';
|
||||
import {Middleware} from 'redux';
|
||||
import {ObjectTypedKeys} from './object';
|
||||
import IPCChildProcess from './ipc-child-process';
|
||||
import ChildProcess from 'child_process';
|
||||
|
||||
// remote interface to `../plugins`
|
||||
const plugins = remote.require('./plugins') as typeof import('../../app/plugins');
|
||||
|
|
@ -182,6 +184,8 @@ Module._load = function _load(path: string) {
|
|||
return Notification;
|
||||
case 'hyper/decorate':
|
||||
return decorate;
|
||||
case 'child_process':
|
||||
return process.platform === 'darwin' ? IPCChildProcess : ChildProcess;
|
||||
default:
|
||||
// eslint-disable-next-line prefer-rest-params
|
||||
return originalLoad.apply(this, arguments);
|
||||
|
|
|
|||
Loading…
Reference in a new issue