san-cli-utils
Version: 
San CLI 中所用到的工具类函数:
94 lines (82 loc) • 2.27 kB
JavaScript
/**
 * Copyright (c) Baidu Inc. All rights reserved.
 *
 * This source code is licensed under the MIT license.
 * See LICENSE file in the project root for license information.
 *
 * @file 跟 tty 输出相关的log
 * @author ksky521
 */
const stripAnsi = require('strip-ansi');
const Consola = require('./Consola');
const debug = require('debug');
const {_types: consolaTypes} = require('consola');
const chalk = require('chalk');
chalk.stripColor = stripAnsi;
const importLazy = require('import-lazy')(require);
const readline = importLazy('readline');
// exports
exports.chalk = chalk;
exports.ora = importLazy('ora');
exports.figures = importLazy('figures');
const logger = new Consola();
[
    'fatal',
    'ready',
    'start',
    'error',
    'warn',
    'log',
    'info',
    'success',
    'debug',
    'trace',
    'silent',
    'time',
    'timeEnd'
].forEach(k => {
    exports[k] = logger[k];
});
exports.logger = logger;
logger.getScopeLogger = (scope, level = process.env.CONSOLA_LEVEL) => {
    const l = logger.withTag(scope);
    setLevel(level, l);
    return l;
};
exports.getScopeLogger = logger.getScopeLogger;
exports.getDebugLogger = scope => {
    return scope ? debug(`san-cli:${scope}`) : debug;
};
function setLevel(level, l) {
    level = consolaTypes[level] ? consolaTypes[level].level : parseInt(level, 10);
    if (!level || isNaN(level)) {
        return;
    }
    if (l && typeof l.fatal === 'function' && l.level) {
        return (l.level = level);
    }
    // 设置 logger 的
    logger.level = level;
    process.env.CONSOLA_LEVEL = level;
}
exports.setLevel = setLevel;
// alias
exports.done = logger.success;
exports.warning = logger.warn;
exports.line = msg => {
    // eslint-disable-next-line no-console
    console.log();
    msg ? logger('─'.repeat(20) + msg + '─'.repeat(20)) : logger('─'.repeat(45));
    // eslint-disable-next-line no-console
    console.log();
};
exports.clearConsole = () => {
    if (process.stdout.isTTY) {
        const blank = '\n'.repeat(process.stdout.rows);
        // eslint-disable-next-line no-console
        console.log(blank);
        readline.cursorTo(process.stdout, 0, 0);
        readline.clearScreenDown(process.stdout);
    }
};
exports.boxen = require('boxen');