diff --git a/packages/api/core/src/api/index.ts b/packages/api/core/src/api/index.ts index be696fcf2d..e9092b6908 100644 --- a/packages/api/core/src/api/index.ts +++ b/packages/api/core/src/api/index.ts @@ -7,7 +7,7 @@ import init, { InitOptions } from './init'; import make, { MakeOptions } from './make'; import _package, { PackageOptions } from './package'; import publish, { PublishOptions } from './publish'; -import start, { StartOptions } from './start'; +import start, { restartApp, StartOptions } from './start'; export class ForgeAPI { /** @@ -61,4 +61,17 @@ export class ForgeAPI { const api = new ForgeAPI(); const utils = new ForgeUtils(); -export { ForgeMakeResult, ElectronProcess, ForgeUtils, ImportOptions, InitOptions, MakeOptions, PackageOptions, PublishOptions, StartOptions, api, utils }; +export { + ElectronProcess, + ForgeMakeResult, + ForgeUtils, + ImportOptions, + InitOptions, + MakeOptions, + PackageOptions, + PublishOptions, + StartOptions, + api, + restartApp, + utils, +}; diff --git a/packages/api/core/src/api/start.ts b/packages/api/core/src/api/start.ts index b2c36a35aa..487ddfdea0 100644 --- a/packages/api/core/src/api/start.ts +++ b/packages/api/core/src/api/start.ts @@ -1,4 +1,5 @@ import { spawn, SpawnOptions } from 'child_process'; +import { EventEmitter } from 'events'; import { getElectronVersion, listrCompatibleRebuildHook } from '@electron-forge/core-utils'; import { ElectronProcess, ForgeArch, ForgeListrTaskFn, ForgePlatform, ResolvedForgeConfig, StartOptions } from '@electron-forge/shared-types'; @@ -24,6 +25,8 @@ type StartContext = { spawned: ElectronProcess; }; +const restartAppEventEmitter = new EventEmitter(); + export default autoTrace( { name: 'start()', category: '@electron-forge/core' }, async ( @@ -213,14 +216,21 @@ export default autoTrace( }; if (interactive) { - process.stdin.on('data', async (data) => { - if (data.toString().trim() === 'rs' && lastSpawned) { + restartAppEventEmitter.on('restart', async () => { + if (lastSpawned) { console.info(chalk.cyan('\nRestarting App\n')); lastSpawned.restarted = true; lastSpawned.kill('SIGTERM'); lastSpawned.emit('restarted', await forgeSpawnWrapper()); } }); + + process.stdin.on('data', async (data) => { + if (data.toString().trim() === 'rs') { + restartApp(); + } + }); + process.stdin.resume(); } @@ -231,3 +241,7 @@ export default autoTrace( return spawned; } ); + +export function restartApp() { + restartAppEventEmitter.emit('restart'); +}