diff --git a/packages/esbuild/src/executors/esbuild/esbuild.impl.ts b/packages/esbuild/src/executors/esbuild/esbuild.impl.ts index 16c7f1f3f9..8529047ca3 100644 --- a/packages/esbuild/src/executors/esbuild/esbuild.impl.ts +++ b/packages/esbuild/src/executors/esbuild/esbuild.impl.ts @@ -169,14 +169,21 @@ export async function* esbuildExecutor( }); await ctx.watch(); - return () => ctx.dispose(); + return async () => ctx.dispose(); }) ); registerCleanupCallback(() => { - assetsResult?.stop(); - packageJsonResult?.stop(); - disposeFns.forEach((fn) => fn()); + if (typeof assetsResult?.stop === 'function') assetsResult.stop(); + + if (typeof packageJsonResult?.stop === 'function') { + packageJsonResult.stop(); + } + + disposeFns.forEach(async (fn) => { + await fn(); + }); + done(); // return from async iterable }); } diff --git a/packages/js/src/executors/node/node.impl.ts b/packages/js/src/executors/node/node.impl.ts index 8e8a11d654..2f85261152 100644 --- a/packages/js/src/executors/node/node.impl.ts +++ b/packages/js/src/executors/node/node.impl.ts @@ -37,8 +37,6 @@ function debounce(fn: () => Promise, wait: number): () => Promise { let pendingPromise: Promise | null = null; return () => { - clearTimeout(timeoutId); - if (!pendingPromise) { pendingPromise = new Promise((resolve, reject) => { timeoutId = setTimeout(() => { @@ -50,6 +48,9 @@ function debounce(fn: () => Promise, wait: number): () => Promise { .catch((error) => { pendingPromise = null; reject(error); + }) + .finally(() => { + clearTimeout(timeoutId); }); }, wait); }); @@ -197,7 +198,7 @@ export async function* nodeExecutor( if (code !== 0) { error(new Error(`Process exited with code ${code}`)); } else { - done(); + resolve(done()); } } resolve(); @@ -226,8 +227,12 @@ export async function* nodeExecutor( }; const stopAllTasks = async (signal: NodeJS.Signals = 'SIGTERM') => { - additionalExitHandler?.(); - await currentTask?.stop(signal); + if (typeof additionalExitHandler === 'function') { + additionalExitHandler(); + } + if (typeof currentTask?.stop === 'function') { + await currentTask.stop(signal); + } for (const task of tasks) { await task.stop(signal); }