({
level = renderer.logLevel,
messageTokens = [],
type = null,
prefix = null,
prefixColor = null,
disableNewLine = null,
})
| 229 | * If no type is provided, applies the default styling to the log message. |
| 230 | */ |
| 231 | const writeStdErr = ({ |
| 232 | level = renderer.logLevel, |
| 233 | messageTokens = [], |
| 234 | type = null, |
| 235 | prefix = null, |
| 236 | prefixColor = null, |
| 237 | disableNewLine = null, |
| 238 | }) => { |
| 239 | level = level || renderer.logLevel |
| 240 | |
| 241 | // If the log level is higher than the global log level, do not write the log |
| 242 | if (renderer.levels[level] > renderer.levels[renderer.logLevel]) { |
| 243 | return |
| 244 | } |
| 245 | |
| 246 | // Stop the spinner to not collide with log output |
| 247 | renderer.spinner.stop() |
| 248 | |
| 249 | // Process the message tokens |
| 250 | let formattedMessage = '' |
| 251 | |
| 252 | // Remove first token |
| 253 | const firstToken = messageTokens.shift() |
| 254 | |
| 255 | // Check if firstToken is actually a string and contains placeholders |
| 256 | if (typeof firstToken === 'string' && /%[sd]/.test(firstToken)) { |
| 257 | // Replace format specifiers with values from the messageTokens |
| 258 | formattedMessage = firstToken.replace(/%s|%d/g, () => { |
| 259 | const token = messageTokens.shift() |
| 260 | if (typeof token === 'object' && token !== null) { |
| 261 | return util.inspect(token, { colors: true, depth: null }) |
| 262 | } |
| 263 | return token |
| 264 | }) |
| 265 | } else { |
| 266 | // Often empty messages are used to create blank lines |
| 267 | if (firstToken === undefined) { |
| 268 | formattedMessage = '' |
| 269 | } else if (firstToken instanceof Error) { |
| 270 | formattedMessage = firstToken.stack |
| 271 | ? firstToken.stack |
| 272 | : firstToken.message |
| 273 | } else if (typeof firstToken === 'object' && firstToken !== null) { |
| 274 | formattedMessage = util.inspect(firstToken, { |
| 275 | colors: true, |
| 276 | depth: null, |
| 277 | }) |
| 278 | } else { |
| 279 | formattedMessage = firstToken |
| 280 | } |
| 281 | } |
| 282 | |
| 283 | // Process remaining tokens if any exist after the initial formatting |
| 284 | while (messageTokens.length > 0) { |
| 285 | const token = messageTokens.shift() |
| 286 | let messageContent = '' |
| 287 | if (token instanceof Error) { |
| 288 | messageContent = token.toString() |
no test coverage detected
searching dependent graphs…