From fe137fd89a41a0df6a8ffab94471f8078deafcce Mon Sep 17 00:00:00 2001 From: Erik Moura Date: Thu, 12 Oct 2023 22:19:42 -0300 Subject: [PATCH 1/2] refactor(core): allow restart logic to be triggered using an event --- packages/api/core/src/api/start.ts | 23 +++++++++++++++-------- typings/nodejs/index.d.ts | 7 +++++++ 2 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 typings/nodejs/index.d.ts diff --git a/packages/api/core/src/api/start.ts b/packages/api/core/src/api/start.ts index b2c36a35aa..3021b1e832 100644 --- a/packages/api/core/src/api/start.ts +++ b/packages/api/core/src/api/start.ts @@ -213,14 +213,21 @@ export default autoTrace( }; if (interactive) { - process.stdin.on('data', async (data) => { - if (data.toString().trim() === 'rs' && lastSpawned) { - console.info(chalk.cyan('\nRestarting App\n')); - lastSpawned.restarted = true; - lastSpawned.kill('SIGTERM'); - lastSpawned.emit('restarted', await forgeSpawnWrapper()); - } - }); + process.on('FORGE_RESTART_APP', 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') { + process.emit('FORGE_RESTART_APP'); + } + }); + process.stdin.resume(); } diff --git a/typings/nodejs/index.d.ts b/typings/nodejs/index.d.ts new file mode 100644 index 0000000000..3b809f6b73 --- /dev/null +++ b/typings/nodejs/index.d.ts @@ -0,0 +1,7 @@ +declare namespace NodeJS { + interface Process extends EventEmitter { + emit(event: 'FORGE_RESTART_APP'): boolean; + + on(event: 'FORGE_RESTART_APP', listener: () => void): NodeJS.Process; + } +} From ef1e465b1cc6ac66e3f1a27908f5d22dad203e71 Mon Sep 17 00:00:00 2001 From: Erik Moura Date: Thu, 30 Nov 2023 13:41:20 -0300 Subject: [PATCH 2/2] refactor: alternative approach --- packages/api/core/src/api/index.ts | 17 ++++++++++++++-- packages/api/core/src/api/start.ts | 31 ++++++++++++++++++------------ typings/nodejs/index.d.ts | 7 ------- 3 files changed, 34 insertions(+), 21 deletions(-) delete mode 100644 typings/nodejs/index.d.ts 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 3021b1e832..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,20 +216,20 @@ export default autoTrace( }; if (interactive) { - process.on('FORGE_RESTART_APP', async () => { + restartAppEventEmitter.on('restart', async () => { if (lastSpawned) { - console.info(chalk.cyan('\nRestarting App\n')); - lastSpawned.restarted = true; - lastSpawned.kill('SIGTERM'); - lastSpawned.emit('restarted', await forgeSpawnWrapper()); - } - }); + 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') { - process.emit('FORGE_RESTART_APP'); - } - }); + process.stdin.on('data', async (data) => { + if (data.toString().trim() === 'rs') { + restartApp(); + } + }); process.stdin.resume(); } @@ -238,3 +241,7 @@ export default autoTrace( return spawned; } ); + +export function restartApp() { + restartAppEventEmitter.emit('restart'); +} diff --git a/typings/nodejs/index.d.ts b/typings/nodejs/index.d.ts deleted file mode 100644 index 3b809f6b73..0000000000 --- a/typings/nodejs/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare namespace NodeJS { - interface Process extends EventEmitter { - emit(event: 'FORGE_RESTART_APP'): boolean; - - on(event: 'FORGE_RESTART_APP', listener: () => void): NodeJS.Process; - } -}