import * as p from '@clack/prompts'; import { log } from './general'; export function asyncAction(action: () => Promise, timeout = 5000, waitingMessage: string): Promise { return new Promise((resolve, reject) => { const timer = setTimeout(() => { reject(new Error('Action timed out')); }, timeout); const s = p.spinner(); s.start(waitingMessage); action() .then(result => { clearTimeout(timer); s.stop(); resolve(result); }) .catch(error => { clearTimeout(timer); s.stop(); log('❌ Error:', error); reject(error); }); }); }