auron
Version:
Interact with your ATProto labeler from your terminal
29 lines (23 loc) • 658 B
text/typescript
import ora, { Ora } from "ora";
let globalSpinner: Ora | null = null;
export const getGlobalSpinner = () => globalSpinner;
export const withLoader = async <T>(
message: string,
fn: (updateMessage: (newMessage: string) => void, spinner?: Ora) => Promise<T>
): Promise<T> => {
const spinner = ora(message).start();
globalSpinner = spinner;
const updateMessage = (newMessage: string) => {
spinner.text = newMessage;
};
try {
const result = await fn(updateMessage, spinner);
spinner.succeed();
globalSpinner = null;
return result;
} catch (error) {
spinner.fail();
globalSpinner = null;
throw error;
}
};