Files
OmniRoute/bin/cli/spinner.mjs
diegosouzapw 7a2682efb5 feat(cli): fase 8.1/8.6/8.14 — spinner, open, clipboard e environment helpers
- spinner.mjs: withSpinner/shouldUseSpinner com suporte a quiet/output/CI/NO_COLOR
- open.mjs: comando `open` com 16 recursos, respeita ambientes restritos
- environment.mjs: detectRestrictedEnvironment/getEnvBanner (codespaces/wsl/gitpod/replit/ci)
- clipboard.mjs: copyToClipboard/isClipboardSupported (pbcopy/clip/xclip/xsel/wl-copy)
- check-env-doc-sync: vars de plataforma/OS adicionadas ao IGNORE_FROM_CODE
2026-05-15 03:00:52 -03:00

31 lines
881 B
JavaScript

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;
}