83 lines
2 KiB
Text
83 lines
2 KiB
Text
|
const execSync = require('child_process').execSync
|
|||
|
|
|||
|
// Log symbols
|
|||
|
const figuresDefault = {
|
|||
|
bullet: '●',
|
|||
|
circle: '◯',
|
|||
|
cross: '✖',
|
|||
|
lozenge: '◆',
|
|||
|
play: '▶',
|
|||
|
pointer: '❯',
|
|||
|
square: '◼',
|
|||
|
star: '★',
|
|||
|
tick: '✔'
|
|||
|
}
|
|||
|
|
|||
|
const figuresFallback = {
|
|||
|
bullet: '■',
|
|||
|
circle: '□',
|
|||
|
cross: '×',
|
|||
|
lozenge: '♦',
|
|||
|
play: '►',
|
|||
|
pointer: '>',
|
|||
|
square: '■',
|
|||
|
star: '✶',
|
|||
|
tick: '√'
|
|||
|
}
|
|||
|
|
|||
|
function isUnicodeSupported() {
|
|||
|
if (process.platform !== 'win32') {
|
|||
|
// Linux console (kernel)
|
|||
|
return process.env.TERM !== 'linux'
|
|||
|
}
|
|||
|
|
|||
|
return (
|
|||
|
Boolean(process.env.CI) ||
|
|||
|
// Windows Terminal
|
|||
|
Boolean(process.env.WT_SESSION) ||
|
|||
|
// ConEmu and cmder
|
|||
|
process.env.ConEmuTask === '{cmd::Cmder}' ||
|
|||
|
process.env.TERM_PROGRAM === 'vscode' ||
|
|||
|
process.env.TERM === 'xterm-256color' ||
|
|||
|
process.env.TERM === 'alacritty'
|
|||
|
)
|
|||
|
}
|
|||
|
|
|||
|
const figures = isUnicodeSupported() ? figuresDefault : figuresFallback
|
|||
|
|
|||
|
function log(type, label, msg) {
|
|||
|
let icon, message
|
|||
|
if (type === 'info') {
|
|||
|
icon = chalk.cyanBright(figures.pointer)
|
|||
|
message = chalk.gray.bold(msg)
|
|||
|
} else if (type === 'star') {
|
|||
|
icon = chalk.yellowBright(figures.star)
|
|||
|
message = chalk.bold(msg)
|
|||
|
} else if (type === 'success') {
|
|||
|
icon = chalk.greenBright(figures.play)
|
|||
|
message = chalk.bold(msg)
|
|||
|
} else if (type === 'warn') {
|
|||
|
icon = `${chalk.yellowBright(figures.lozenge)} ${chalk.bold.black.bgYellowBright(' WARNING ')}`
|
|||
|
message = chalk.yellowBright(msg)
|
|||
|
} else if (type === 'error') {
|
|||
|
icon = `${chalk.redBright(figures.cross)} ${chalk.black.bold.bgRedBright(' ERROR ')}`
|
|||
|
message = chalk.redBright(msg)
|
|||
|
}
|
|||
|
const outputMessage = `${icon} ${chalk.bold(label)} ${message}`
|
|||
|
console.log(outputMessage)
|
|||
|
}
|
|||
|
|
|||
|
function runCommand(spinnerTitle, command) {
|
|||
|
execSync(`gum spin --spinner dot --title "${spinnerTitle}" -- ${command}`, {
|
|||
|
stdio: 'inherit',
|
|||
|
shell: true
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
async function runSilentCommand(command) {
|
|||
|
execSync(`${command}`, { stdio: 'inherit', shell: true })
|
|||
|
}
|
|||
|
|
|||
|
function fileExists(pathToFile) {
|
|||
|
return fs.existsSync(pathToFile)
|
|||
|
}
|