UNPKG

eas-cli

Version:
103 lines (102 loc) 3.55 kB
"use strict"; 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;