export type PiReleasePressureCleanupStep = { name: string; run(): void | Promise; }; export async function runPiReleasePressureCleanup( steps: readonly PiReleasePressureCleanupStep[], options: { stepTimeoutMs?: number } = {}, ): Promise { const stepTimeoutMs = options.stepTimeoutMs ?? 10_000; if (!Number.isSafeInteger(stepTimeoutMs) || stepTimeoutMs <= 0) { throw new Error('PI release pressure cleanup timeout must be a positive safe integer'); } const failures: Array<{ name: string; error: unknown }> = []; for (const step of steps) { let timeout: ReturnType | undefined; try { await Promise.race([ Promise.resolve().then(() => step.run()), new Promise((_resolve, reject) => { timeout = setTimeout(() => { reject(new Error(`PI release pressure cleanup timed out: ${step.name}`)); }, stepTimeoutMs); }), ]); } catch (error) { failures.push({ name: step.name, error }); } finally { if (timeout) clearTimeout(timeout); } } if (failures.length > 0) { throw new AggregateError( failures.map(({ error }) => error), `PI release pressure cleanup failed: ${failures.map(({ name }) => name).join(', ')}`, ); } }