@pnpm/file-reporter
Version:
A file reporter for pnpm
69 lines • 2.48 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const graceful_fs_1 = __importDefault(require("graceful-fs"));
const LOG_FILENAME = 'node_modules/.pnpm-debug.log';
function default_1(streamParser) {
const logs = [];
streamParser['on']('data', function (logObj) {
if (isUsefulLog(logObj)) {
logs.push(logObj);
}
});
process.on('exit', (code) => {
if (code === 0 || global['writeDebugLogFile'] === false) {
// it might not exist, so it is OK if it fails
try {
graceful_fs_1.default.unlinkSync(LOG_FILENAME);
}
catch (err) { }
return;
}
const prettyLogs = getPrettyLogs();
const jsonLogs = JSON.stringify(prettyLogs, null, 2);
// Don't create a node_modules directory if it does not exist
const dest = graceful_fs_1.default.existsSync(path_1.default.dirname(LOG_FILENAME))
? LOG_FILENAME
: path_1.default.basename(LOG_FILENAME);
graceful_fs_1.default.writeFileSync(dest, jsonLogs, 'utf-8');
});
function getPrettyLogs() {
const prettyLogs = {};
logs.forEach((logObj, i) => {
// eslint-disable-next-line
const key = `${i} ${logObj['level']} ${logObj['name']}`;
const msgobj = getMessageObj(logObj);
prettyLogs[key] = prettify(msgobj);
});
return prettyLogs;
}
function getMessageObj(logobj) {
const msgobj = {};
for (const key in logobj) {
if (['time', 'hostname', 'pid', 'level', 'name'].includes(key))
continue;
msgobj[key] = logobj[key];
}
return msgobj;
}
function prettify(obj) {
if (obj instanceof Error) {
let logMsg = obj.toString();
if (obj.stack) {
logMsg += `\n${obj.stack}`;
}
return logMsg;
}
if (Object.keys(obj).length === 1 && obj['message'])
return obj['message'];
return obj;
}
}
exports.default = default_1;
function isUsefulLog(logObj) {
return logObj['name'] !== 'pnpm:progress' || logObj['status'] !== 'downloading';
}
//# sourceMappingURL=index.js.map