logger.ts 669 B

123456789101112131415161718192021222324252627
  1. // logger.ts
  2. import ora from "ora";
  3. export async function step<T extends (...args: any[]) => Promise<any>>(
  4. name: string,
  5. fn: T,
  6. ...args: any[]
  7. ): Promise<any> {
  8. console.time(name);
  9. const spinner = ora({ text: `${name}…`, spinner: "dots" }).start();
  10. const consoleLog = console.log;
  11. console.log = (text) => {
  12. spinner.text += "\n" + text;
  13. };
  14. try {
  15. const result = await fn(...args);
  16. spinner.succeed(`${name} finished`);
  17. console.timeEnd(name);
  18. return result;
  19. } catch (err) {
  20. spinner.fail(`${name} failed`);
  21. console.timeEnd(name);
  22. throw err;
  23. } finally {
  24. console.log = consoleLog;
  25. }
  26. }