@lucasmeira/npmfix
Version:
A CLI to fix npm dependencies
79 lines (78 loc) • 3.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.updateLoggerMaxFiles = updateLoggerMaxFiles;
const tslib_1 = require("tslib");
const fs_1 = tslib_1.__importDefault(require("fs"));
const path_1 = tslib_1.__importDefault(require("path"));
const i18next_1 = tslib_1.__importDefault(require("i18next"));
const winston_1 = tslib_1.__importDefault(require("winston"));
const winston_daily_rotate_file_1 = tslib_1.__importDefault(require("winston-daily-rotate-file"));
const utils_1 = require("./utils");
const ROOT_DIR = process.cwd();
const CONFIG_PATH = path_1.default.resolve(ROOT_DIR, 'config.json');
function getConfig() {
if (fs_1.default.existsSync(CONFIG_PATH)) {
const configData = fs_1.default.readFileSync(CONFIG_PATH, 'utf8');
return JSON.parse(configData);
}
return { maxFiles: '7d' };
}
function saveConfig(config) {
fs_1.default.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), 'utf8');
}
function updateLoggerMaxFiles(logger, maxFiles) {
const transport = logger.transports.find((t) => t instanceof winston_daily_rotate_file_1.default);
if (transport) {
transport.options.maxFiles = maxFiles;
}
saveConfig({ maxFiles });
logger.info(`maxFiles changed to ${maxFiles}`);
}
function logFilePath() {
const logDirectory = path_1.default.resolve(ROOT_DIR, 'logs');
const fileName = `/log-%DATE%.log`;
return {
model: path_1.default.join(logDirectory, fileName),
path: path_1.default
.join(logDirectory, fileName)
.replace('%DATE%', new Date().toISOString().split('T')[0]),
};
}
async function initializeLogger() {
const config = getConfig();
return winston_1.default.createLogger({
level: 'info',
format: winston_1.default.format.combine(winston_1.default.format.timestamp(), winston_1.default.format.printf(({ level, message, timestamp }) => {
return `${timestamp} [${level}]: ${message}`;
})),
transports: [
new winston_daily_rotate_file_1.default({
filename: logFilePath().model,
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: config.maxFiles,
}),
new winston_1.default.transports.Console({
format: winston_1.default.format.cli(),
}),
],
});
}
class LoggerService {
static instance;
static path;
constructor() { }
static async getInstance() {
if (!LoggerService.instance) {
LoggerService.instance = await initializeLogger();
LoggerService.path = logFilePath().path;
LoggerService.instance.info(`${i18next_1.default.t('logFilePath')} ${(0, utils_1.fileLink)(LoggerService.path)}`);
}
return LoggerService.instance;
}
static async getLoggerForClass(cls) {
return (await this.getInstance()).child({ className: cls.name });
}
}
exports.default = LoggerService;