pacote-install
Version:
A tool to download npm packages from specific registries
129 lines (128 loc) • 4.59 kB
JavaScript
;
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;