eas-cli
Version:
EAS command line tool
103 lines (102 loc) • 3.55 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.ora = void 0;
const tslib_1 = require("tslib");
const getenv_1 = require("getenv");
// eslint-disable-next-line
const ora_1 = tslib_1.__importDefault(require("ora"));
const log_1 = tslib_1.__importDefault(require("./log"));
// eslint-disable-next-line no-console
const logReal = console.log;
// eslint-disable-next-line no-console
const infoReal = console.info;
// eslint-disable-next-line no-console
const warnReal = console.warn;
// eslint-disable-next-line no-console
const errorReal = console.error;
const isCi = (0, getenv_1.boolish)('CI', false);
/**
* A custom ora spinner that sends the stream to stdout in CI, or non-TTY, instead of stderr (the default).
*
* @param options
* @returns
*/
function ora(options) {
const inputOptions = typeof options === 'string' ? { text: options } : options ?? {};
const disabled = log_1.default.isDebug || !process.stdin.isTTY || isCi;
const spinner = (0, ora_1.default)({
// Ensure our non-interactive mode emulates CI mode.
isEnabled: !disabled,
// In non-interactive mode, send the stream to stdout so it prevents looking like an error.
stream: disabled ? process.stdout : process.stderr,
...inputOptions,
});
const oraStart = spinner.start.bind(spinner);
const oraStop = spinner.stop.bind(spinner);
const oraStopAndPersist = spinner.stopAndPersist.bind(spinner);
const logWrap = (method, args) => {
oraStop();
method(...args);
spinner.start();
};
const wrapNativeLogs = () => {
// eslint-disable-next-line no-console
console.log = (...args) => {
logWrap(logReal, args);
};
// eslint-disable-next-line no-console
console.info = (...args) => {
logWrap(infoReal, args);
};
// eslint-disable-next-line no-console
console.warn = (...args) => {
logWrap(warnReal, args);
};
// eslint-disable-next-line no-console
console.error = (...args) => {
logWrap(errorReal, args);
};
};
const resetNativeLogs = () => {
// eslint-disable-next-line no-console
console.log = logReal;
// eslint-disable-next-line no-console
console.info = infoReal;
// eslint-disable-next-line no-console
console.warn = warnReal;
// eslint-disable-next-line no-console
console.error = errorReal;
};
spinner.start = (text) => {
// wrapNativeLogs wraps calls to console so they always:
// 1. stop the spinner
// 2. log the message
// 3. start the spinner again
// Every restart of the spinner causes the spinner message to be logged again
// which makes logs look like
//
// - Exporting...
// [expo-cli] Starting Metro Bundler
// - Exporting...
// [expo-cli] Android Bundling complete 3492ms
// - Exporting...
//
// Skipping wrapping native logs removes the repeated interleaved "Exporting..." messages.
if (!disabled) {
wrapNativeLogs();
}
return oraStart(text);
};
spinner.stopAndPersist = (options) => {
const result = oraStopAndPersist(options);
resetNativeLogs();
return result;
};
spinner.stop = () => {
const result = oraStop();
resetNativeLogs();
return result;
};
return spinner;
}
exports.ora = ora;
;