; | |
const chalk = require('chalk'); | |
let logs = []; | |
const logLevel = () => { | |
return process.env.npm_config_loglevel || 'notice'; | |
}; | |
const error = (...messages) => { | |
logs.push(messages.join(' ')); | |
console.log(chalk.red(...messages)); // eslint-disable-line no-console | |
}; | |
const warn = (...messages) => { | |
if (logLevel() === 'silent') return; | |
logs.push(messages.join(' ')); | |
console.log(chalk.yellow(...messages)); // eslint-disable-line no-console | |
}; | |
const log = (...messages) => { | |
if (logLevel() === 'silent' || logLevel() === 'warn') return; | |
logs.push(messages.join(' ')); | |
console.log(...messages); // eslint-disable-line no-console | |
}; | |
const always = (...messages) => { | |
logs.push(messages.join(' ')); | |
console.log(...messages); // eslint-disable-line no-console | |
}; | |
// splits long text into lines and calls log() | |
// on each one to allow easy unit testing for specific message | |
const logLines = text => { | |
const lines = text.split('\n'); | |
for (const line of lines) { | |
log(line); | |
} | |
}; | |
const print = () => { | |
return logs.join('\n'); | |
}; | |
const reset = () => { | |
logs = []; | |
}; | |
module.exports = { | |
log, | |
warn, | |
error, | |
always, | |
logLines, | |
print, | |
reset, | |
logLevel | |
}; |