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,
|
||
};
|