69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
const { INSTALL_STEPS } = require('./constants');
|
||||
|
|
|
|||
|
|
let currentStepIndex = 0;
|
|||
|
|
let logFileStream = null;
|
|||
|
|
|
|||
|
|
const colors = {
|
|||
|
|
reset: '\x1b[0m',
|
|||
|
|
bright: '\x1b[1m',
|
|||
|
|
green: '\x1b[32m',
|
|||
|
|
yellow: '\x1b[33m',
|
|||
|
|
red: '\x1b[31m',
|
|||
|
|
cyan: '\x1b[36m',
|
|||
|
|
gray: '\x1b[90m',
|
|||
|
|
magenta: '\x1b[35m'
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const log = {
|
|||
|
|
info: (msg) => console.log(`${colors.cyan}ℹ${colors.reset} ${msg}`),
|
|||
|
|
success: (msg) => console.log(`${colors.green}✓${colors.reset} ${msg}`),
|
|||
|
|
warning: (msg) => console.log(`${colors.yellow}⚠${colors.reset} ${msg}`),
|
|||
|
|
error: (msg) => console.log(`${colors.red}✗${colors.reset} ${msg}`),
|
|||
|
|
step: (msg) => {
|
|||
|
|
const idx = INSTALL_STEPS.indexOf(msg);
|
|||
|
|
if (idx >= 0) {
|
|||
|
|
currentStepIndex = idx;
|
|||
|
|
}
|
|||
|
|
const progress = currentStepIndex < INSTALL_STEPS.length
|
|||
|
|
? `${colors.gray}[${currentStepIndex + 1}/${INSTALL_STEPS.length}]${colors.reset} `
|
|||
|
|
: '';
|
|||
|
|
console.log(`\n${progress}${colors.bright}${colors.cyan}▶ ${msg}${colors.reset}`);
|
|||
|
|
},
|
|||
|
|
divider: () => console.log(`${colors.gray}${'─'.repeat(60)}${colors.reset}`),
|
|||
|
|
subStep: (msg) => console.log(` ${colors.gray}└${colors.reset} ${msg}`)
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
function initLogFile(LOG_DIR) {
|
|||
|
|
const fs = require('fs');
|
|||
|
|
const path = require('path');
|
|||
|
|
if (!fs.existsSync(LOG_DIR)) {
|
|||
|
|
fs.mkdirSync(LOG_DIR, { recursive: true });
|
|||
|
|
}
|
|||
|
|
const logFileName = `install_${new Date().toISOString().replace(/[:.]/g, '-')}.log`;
|
|||
|
|
const logFilePath = path.join(LOG_DIR, logFileName);
|
|||
|
|
logFileStream = fs.createWriteStream(logFilePath, { flags: 'a' });
|
|||
|
|
|
|||
|
|
const originalConsoleLog = console.log;
|
|||
|
|
console.log = (...args) => {
|
|||
|
|
const timestamp = new Date().toISOString();
|
|||
|
|
const message = args.map(arg =>
|
|||
|
|
typeof arg === 'string' ? arg.replace(/\x1b\[[0-9;]*m/g, '') : String(arg)
|
|||
|
|
).join(' ');
|
|||
|
|
logFileStream.write(`[${timestamp}] ${message}\n`);
|
|||
|
|
originalConsoleLog.apply(console, args);
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function closeLogFile() {
|
|||
|
|
if (logFileStream) {
|
|||
|
|
logFileStream.end();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
module.exports = {
|
|||
|
|
colors,
|
|||
|
|
log,
|
|||
|
|
initLogFile,
|
|||
|
|
closeLogFile,
|
|||
|
|
};
|