142 lines
3.1 KiB
JavaScript
142 lines
3.1 KiB
JavaScript
/**
|
|
* 工具函数模块
|
|
* 提供通用的辅助功能和实用工具
|
|
*/
|
|
|
|
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`;
|
|
}
|