export async function waitForProcessExitUntil( exitPromise: Promise, timeoutMs: number ): Promise { let timer: ReturnType | undefined const timeout = new Promise((resolve) => { timer = setTimeout(resolve, timeoutMs) }) try { await Promise.race([exitPromise, timeout]) } finally { // Why: this runs in a short-lived entry; a live grace timer delays the // parent spawnSync even after the app-server process has already exited. if (timer !== undefined) { clearTimeout(timer) } } }