File size: 881 Bytes
cd8bd0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import ora from "ora";

export async function withSpinner(label, fn, opts = {}) {
  const enabled = shouldUseSpinner(opts);
  const spinner = enabled
    ? ora({ text: label, stream: process.stderr }).start()
    : { succeed: () => {}, fail: () => {}, info: () => {}, text: "", stop: () => {} };

  try {
    const result = await fn({
      update: (text) => {
        spinner.text = text;
      },
    });
    if (enabled) spinner.succeed(label);
    return result;
  } catch (err) {
    if (enabled) spinner.fail(`${label}${err.message}`);
    throw err;
  }
}

export function shouldUseSpinner(opts = {}) {
  if (opts.quiet) return false;
  if (opts.output === "json" || opts.output === "jsonl" || opts.output === "csv") return false;
  if (!process.stderr.isTTY) return false;
  if (process.env.NO_COLOR) return false;
  if (process.env.CI) return false;
  return true;
}