diff --git a/packages/npm/@amazeelabs/publisher/src/mode-local/tools/runner.ts b/packages/npm/@amazeelabs/publisher/src/mode-local/tools/runner.ts index d63d53927f..3846cb7163 100644 --- a/packages/npm/@amazeelabs/publisher/src/mode-local/tools/runner.ts +++ b/packages/npm/@amazeelabs/publisher/src/mode-local/tools/runner.ts @@ -64,6 +64,7 @@ export const run = (options: { const result = new Promise((resolve) => { process.on('exit', (code): void => { + options.controller.offCancel(kill); if (killSignal) { core.output$.next( `Command killed with ${killSignal} signal: "${options.command}"`, @@ -109,7 +110,7 @@ export const run = (options: { throw new Error(`Failed to kill "${options.command}" process.`); }; - options.controller?.onCancel(() => kill()); + options.controller.onCancel(kill); return { output, diff --git a/packages/npm/@amazeelabs/publisher/src/tools/queue.ts b/packages/npm/@amazeelabs/publisher/src/tools/queue.ts index 27ef391c92..129ff7dbc5 100644 --- a/packages/npm/@amazeelabs/publisher/src/tools/queue.ts +++ b/packages/npm/@amazeelabs/publisher/src/tools/queue.ts @@ -6,6 +6,9 @@ export class TaskController { onCancel = (callback: () => void): void => { this.cancelCallbacks.push(callback); }; + offCancel = (callback: () => void): void => { + this.cancelCallbacks = this.cancelCallbacks.filter((cb) => cb !== callback); + }; } export type TaskResult = Promise;