spinner.ts 560 B

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