spinner.ts 541 B

123456789101112131415161718192021222324
  1. import ora, { type Ora } from 'ora';
  2. interface SpinnerOptions {
  3. failedText?: string;
  4. successText?: string;
  5. title: string;
  6. }
  7. export async function spinner<T>(
  8. { failedText, successText, title }: SpinnerOptions,
  9. callback: () => Promise<T>,
  10. ): Promise<T> {
  11. const loading: Ora = ora(title).start();
  12. try {
  13. const result = await callback();
  14. loading.succeed(successText || 'Success!');
  15. return result;
  16. } catch (error) {
  17. loading.fail(failedText || 'Failed!');
  18. throw error;
  19. } finally {
  20. loading.stop();
  21. }
  22. }