mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-29 20:41:47 -04:00
62 lines
1.3 KiB
JavaScript
62 lines
1.3 KiB
JavaScript
'use strict'
|
|
const logger = require('@zkochan/logger')
|
|
const fs = require('fs')
|
|
const YAML = require('json2yaml')
|
|
const slice = Array.prototype.slice
|
|
|
|
const logFilePath = 'pnpm-debug.log'
|
|
|
|
const logs = []
|
|
|
|
logger.onAny(function () {
|
|
const args = slice.call(arguments).slice(2)
|
|
if (isUsefulLog.apply(null, args)) {
|
|
logs.push(args)
|
|
}
|
|
})
|
|
|
|
function isUsefulLog (level) {
|
|
return level !== 'progress' || arguments[2] !== 'downloading'
|
|
}
|
|
|
|
process.on('exit', code => {
|
|
if (code === 0) {
|
|
fs.unlink(logFilePath)
|
|
return
|
|
}
|
|
|
|
const prettyLogs = getPrettyLogs()
|
|
const yamlLogs = YAML.stringify(prettyLogs)
|
|
fs.writeFileSync(logFilePath, yamlLogs, 'UTF8')
|
|
})
|
|
|
|
function getPrettyLogs () {
|
|
const logObj = {}
|
|
logs.forEach((args, i) => {
|
|
const key = `${i} ${args[0]} ${args[1]}`
|
|
const rest = mergeStrings(args.slice(2).map(stringify))
|
|
logObj[key] = rest.length === 1 ? rest[0] : rest
|
|
})
|
|
return logObj
|
|
}
|
|
|
|
function stringify (obj) {
|
|
if (obj instanceof Error) return obj.toString()
|
|
return obj
|
|
}
|
|
|
|
function mergeStrings (arr) {
|
|
const mergedArr = []
|
|
let prevWasString = false
|
|
arr.forEach(el => {
|
|
const currentIsString = typeof el === 'string'
|
|
if (currentIsString && prevWasString) {
|
|
mergedArr[mergedArr.length - 1] += ' ' + el
|
|
} else {
|
|
mergedArr.push(el)
|
|
}
|
|
prevWasString = currentIsString
|
|
})
|
|
return mergedArr
|
|
}
|