UNPKG

pacote-install

Version:

A tool to download npm packages from specific registries

129 lines (128 loc) 4.59 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LogLevel = void 0; exports.createLogger = createLogger; const chalk_1 = __importDefault(require("chalk")); // 日志级别 var LogLevel; (function (LogLevel) { LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG"; LogLevel[LogLevel["INFO"] = 1] = "INFO"; LogLevel[LogLevel["WARN"] = 2] = "WARN"; LogLevel[LogLevel["ERROR"] = 3] = "ERROR"; LogLevel[LogLevel["SILENT"] = 4] = "SILENT"; })(LogLevel || (exports.LogLevel = LogLevel = {})); class Logger { constructor(options = {}) { var _a, _b, _c; this.progressBar = null; this.level = (_a = options.level) !== null && _a !== void 0 ? _a : LogLevel.INFO; this.prefix = (_b = options.prefix) !== null && _b !== void 0 ? _b : 'pacote-install'; this.enableProgress = (_c = options.enableProgress) !== null && _c !== void 0 ? _c : true; } setLevel(level) { this.level = level; } setPrefix(prefix) { this.prefix = prefix; } enableProgressBar(enable) { this.enableProgress = enable; } debug(message, ...args) { if (this.level <= LogLevel.DEBUG) { console.log(chalk_1.default.gray(`[${this.prefix}] ${message}`), ...args); } } info(message, ...args) { if (this.level <= LogLevel.INFO) { console.log(chalk_1.default.cyan(`[${this.prefix}]`), message, ...args); } } success(message, ...args) { if (this.level <= LogLevel.INFO) { console.log(chalk_1.default.green(`[${this.prefix}] ✓`), message, ...args); } } warn(message, ...args) { if (this.level <= LogLevel.WARN) { console.log(chalk_1.default.yellow(`[${this.prefix}] ⚠️`), message, ...args); } } error(message, ...args) { if (this.level <= LogLevel.ERROR) { if (message instanceof Error) { console.error(chalk_1.default.red(`[${this.prefix}] ✖`), message.message, ...args); this.debug(`错误堆栈: ${message.stack}`); } else { console.error(chalk_1.default.red(`[${this.prefix}] ✖`), message, ...args); } } } // 创建进度条 createProgressBar(total, message) { if (!this.enableProgress || this.level > LogLevel.INFO) { return; } // 简单的进度显示逻辑 this.progressBar = { total, current: 0, message, start: Date.now(), update: (value) => { if (!this.progressBar) return; this.progressBar.current = value; const percent = Math.round((value / this.progressBar.total) * 100); const elapsed = ((Date.now() - this.progressBar.start) / 1000).toFixed(1); process.stdout.write(`\r[${this.prefix}] ${this.progressBar.message}: ${percent}% (${value}/${this.progressBar.total}) 耗时: ${elapsed}s`); }, complete: () => { if (!this.progressBar) return; const total = ((Date.now() - this.progressBar.start) / 1000).toFixed(1); process.stdout.write(`\r[${this.prefix}] ${this.progressBar.message}: 100% (${this.progressBar.total}/${this.progressBar.total}) 完成! 总耗时: ${total}s\n`); this.progressBar = null; } }; } updateProgress(value) { if (this.progressBar) { this.progressBar.update(value); } } completeProgress() { if (this.progressBar) { this.progressBar.complete(); } } // 包装错误 wrapError(err, context) { let error; if (err instanceof Error) { error = err; } else if (typeof err === 'string') { error = new Error(err); } else { error = new Error(JSON.stringify(err)); } // 添加上下文信息 const enhancedError = new Error(`${context}: ${error.message}`); enhancedError.stack = error.stack; return enhancedError; } } // 默认实例 const logger = new Logger(); // 工厂方法,允许创建配置不同的logger实例 function createLogger(options = {}) { return new Logger(options); } exports.default = logger;