import ora, { type Ora } from 'ora'; interface SpinnerOptions { failedText?: string; successText?: string; title: string; } export async function spinner( { failedText, successText, title }: SpinnerOptions, callback: () => Promise, ): Promise { const loading: Ora = ora(title).start(); try { const result = await callback(); loading.succeed(successText || 'Success!'); return result; } catch (error) { loading.fail(failedText || 'Failed!'); throw error; } finally { loading.stop(); } }