UNPKG

esa-cli

Version:

A CLI for operating Alibaba Cloud ESA EdgeRoutine (Edge Functions).

161 lines (160 loc) • 5.18 kB
import chalk from 'chalk'; import { format, createLogger } from 'winston'; import DailyRotateFile from 'winston-daily-rotate-file'; import Table from 'cli-table3'; import path from 'path'; import os from 'os'; import ora from 'ora'; import t from '../i18n/index.js'; import { getProjectConfig } from '../utils/fileUtils/index.js'; const transport = new DailyRotateFile({ filename: path.join(os.homedir(), '.esa-logs/esa-debug-%DATE%.log'), level: 'info', datePattern: 'YYYY-MM-DD-HH', zippedArchive: true, maxSize: '10m', maxFiles: '7d' }); class Logger { constructor() { const { combine, timestamp, label, printf } = format; const customFormat = printf(({ level, message, label: printLabel, timestamp: printTimestamp }) => { var _a; let colorizedLevel; const projName = ((_a = getProjectConfig()) === null || _a === void 0 ? void 0 : _a.name) || 'Outside'; switch (level) { case 'warn': colorizedLevel = chalk.yellow(level); break; case 'info': colorizedLevel = chalk.green(level); break; case 'error': colorizedLevel = chalk.red(level); case 'verbose': colorizedLevel = chalk.magenta(level); break; case 'debug': colorizedLevel = chalk.grey(level); break; case 'silly': colorizedLevel = chalk.white(level); break; default: colorizedLevel = level; } return `${printTimestamp} [${chalk.green(printLabel)}] ${colorizedLevel} in ${chalk.italic(projName)}: ${message}`; }); this.logger = createLogger({ level: 'info', format: combine(label({ label: 'ESA' }), timestamp(), customFormat), transports: [transport] }); this.spinner = ora('Loading...'); } static getInstance() { if (!Logger.instance) { Logger.instance = new Logger(); // Object.freeze(Logger.instance); } return Logger.instance; } get ora() { return this.spinner; } setLogLevel(level) { this.logger.level = level; } log(message) { console.log(message); } subLog(message) { console.log(`\t${message}`); } success(message) { console.log(`\nšŸŽ‰ ${chalk.bgGreen(' SUCCESS ')} ${chalk.green(message)}`); } debug(message) { this.logger.debug(message); if (this.logger.level === 'debug') { console.log(`${chalk.grey('[DEBUG]')} ${message}`); } } info(message) { this.logger.info(message); } ask(message) { console.log(`ā“ ${message}`); } point(message) { console.log(`šŸ‘‰šŸ» ${chalk.green(message)}`); } block() { console.log('\n'); } warn(message) { this.logger.warn(message); console.log(`\n${chalk.bgYellow(' WARNING ')} ${chalk.yellow(message)}`); } error(message) { this.logger.error(message); console.log(`\nāŒ ${chalk.bgRed(' ERROR ')} ${chalk.red(message)}`); } subError(message) { console.log(`\n${chalk.red(message)}`); } http(message) { this.logger.http(message); } url(message) { console.log(`šŸ”— ${chalk.blue(message)}`); } verbose(message) { this.logger.verbose(message); } silly(message) { this.logger.silly(message); } announcement(message) { // todo console.log(message); } notInProject() { const initCommand = chalk.green('esa init'); this.error(t('common_not_edge_project', { initCommand }).d(`You are not in an esa project, Please run ${initCommand} to initialize a project, or enter an esa project.`)); } pathEacces(localPath) { this.block(); this.log(chalk.yellow(t('common_eacces_intro', { localPath }).d(`You do not have permission to ${localPath}, please use`))); this.block(); this.log(chalk.green(`$ ${chalk.red('sudo')} esa <Command>`)); this.block(); this.subLog(chalk.yellow('OR')); this.block(); this.log(chalk.green(`$ sudo chmod -R 777 ${localPath}`)); } table(head, data, width = []) { const table = new Table({ head, colWidths: width }); table.push(...data); this.log(table.toString()); this.block(); } tree(messages) { if (messages.length === 0) return; const lines = []; lines.push(`╭─ ${messages[0]}`); for (let i = 1; i < messages.length - 1; i++) { lines.push(`│ ${messages[i]}`); } if (messages.length > 1) { lines.push(`╰─ ${messages[messages.length - 1]}`); } console.log(lines.join('\n')); } } const logger = Logger.getInstance(); export default logger;