/** * 工具函数模块 * 提供通用的辅助功能和实用工具 */ import fs from 'fs'; /** * 日志级别枚举 * * @readonly * @enum {string} */ export const LOG_LEVELS = { DEBUG: 'DEBUG', INFO: 'INFO', WARN: 'WARN', ERROR: 'ERROR', }; /** * 获取当前时间戳字符串 * * @returns {string} 格式化的时间戳 */ export function getTimestamp() { return new Date().toISOString(); } /** * 格式化日志消息 * * @param {string} level - 日志级别 * @param {string} message - 日志消息 * @param {object} [meta] - 额外的元数据 * @returns {string} 格式化后的日志消息 */ export function formatLogMessage(level, message, meta = null) { const timestamp = getTimestamp(); let logMessage = `[${timestamp}] [${level}] ${message}`; if (meta && typeof meta === 'object') { logMessage += ` | ${JSON.stringify(meta)}`; } return logMessage; } /** * 输出调试日志 * * @param {string} message - 日志消息 * @param {object} [meta] - 额外的元数据 */ export function logDebug(message, meta) { if (process.env.DEBUG === 'true' || process.env.NODE_ENV === 'development') { console.log(formatLogMessage(LOG_LEVELS.DEBUG, message, meta)); } } /** * 输出信息日志 * * @param {string} message - 日志消息 * @param {object} [meta] - 额外的元数据 */ export function logInfo(message, meta) { console.log(formatLogMessage(LOG_LEVELS.INFO, message, meta)); } /** * 输出警告日志 * * @param {string} message - 日志消息 * @param {object} [meta] - 额外的元数据 */ export function logWarn(message, meta) { console.warn(formatLogMessage(LOG_LEVELS.WARN, message, meta)); } /** * 输出错误日志 * * @param {string} message - 日志消息 * @param {object} [meta] - 额外的元数据 */ export function logError(message, meta) { console.error(formatLogMessage(LOG_LEVELS.ERROR, message, meta)); } /** * 设置 GitHub Actions 输出 * * @param {string} name - 输出名称 * @param {string} value - 输出值 */ export function setActionOutput(name, value) { if (process.env.GITHUB_OUTPUT) { // GitHub Actions 新格式 fs.appendFileSync(process.env.GITHUB_OUTPUT, `${name}=${value}\n`); } else { // 兼容旧格式 console.log(`::set-output name=${name}::${value}`); } } /** * 设置 GitHub Actions 失败状态 * * @param {string} message - 失败消息 */ export function setActionFailed(message) { console.log(`::error::${message}`); process.exit(1); } /** * 检查是否在调试模式 * * @returns {boolean} 是否为调试模式 */ export function isDebugMode() { const debug = process.env.DEBUG || 'false'; const nodeEnv = process.env.NODE_ENV || ''; return debug.toLowerCase() === 'true' || nodeEnv === 'development'; } /** * 格式化持续时间 * * @param {number} milliseconds - 毫秒数 * @returns {string} 格式化的持续时间 */ export function formatDuration(milliseconds) { if (milliseconds < 1000) { return `${milliseconds}ms`; } const seconds = (milliseconds / 1000).toFixed(2); return `${seconds}s`; }