| | |
| | | 'use strict'; |
| | | const os = require('os'); |
| | | const tty = require('tty'); |
| | | const hasFlag = require('has-flag'); |
| | | |
| | | const env = process.env; |
| | | const {env} = process; |
| | | |
| | | let forceColor; |
| | | if (hasFlag('no-color') || |
| | | hasFlag('no-colors') || |
| | | hasFlag('color=false')) { |
| | | forceColor = false; |
| | | hasFlag('color=false') || |
| | | hasFlag('color=never')) { |
| | | forceColor = 0; |
| | | } else if (hasFlag('color') || |
| | | hasFlag('colors') || |
| | | hasFlag('color=true') || |
| | | hasFlag('color=always')) { |
| | | forceColor = true; |
| | | forceColor = 1; |
| | | } |
| | | |
| | | if ('FORCE_COLOR' in env) { |
| | | forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0; |
| | | if (env.FORCE_COLOR === 'true') { |
| | | forceColor = 1; |
| | | } else if (env.FORCE_COLOR === 'false') { |
| | | forceColor = 0; |
| | | } else { |
| | | forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); |
| | | } |
| | | } |
| | | |
| | | function translateLevel(level) { |
| | |
| | | }; |
| | | } |
| | | |
| | | function supportsColor(stream) { |
| | | if (forceColor === false) { |
| | | function supportsColor(haveStream, streamIsTTY) { |
| | | if (forceColor === 0) { |
| | | return 0; |
| | | } |
| | | |
| | |
| | | return 2; |
| | | } |
| | | |
| | | if (stream && !stream.isTTY && forceColor !== true) { |
| | | if (haveStream && !streamIsTTY && forceColor === undefined) { |
| | | return 0; |
| | | } |
| | | |
| | | const min = forceColor ? 1 : 0; |
| | | const min = forceColor || 0; |
| | | |
| | | if (env.TERM === 'dumb') { |
| | | return min; |
| | | } |
| | | |
| | | if (process.platform === 'win32') { |
| | | // Node.js 7.5.0 is the first version of Node.js to include a patch to |
| | | // libuv that enables 256 color output on Windows. Anything earlier and it |
| | | // won't work. However, here we target Node.js 8 at minimum as it is an LTS |
| | | // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows |
| | | // release that supports 256 colors. Windows 10 build 14931 is the first release |
| | | // that supports 16m/TrueColor. |
| | | // Windows 10 build 10586 is the first Windows release that supports 256 colors. |
| | | // Windows 10 build 14931 is the first release that supports 16m/TrueColor. |
| | | const osRelease = os.release().split('.'); |
| | | if ( |
| | | Number(process.versions.node.split('.')[0]) >= 8 && |
| | | Number(osRelease[0]) >= 10 && |
| | | Number(osRelease[2]) >= 10586 |
| | | ) { |
| | |
| | | } |
| | | |
| | | if ('CI' in env) { |
| | | if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { |
| | | if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') { |
| | | return 1; |
| | | } |
| | | |
| | |
| | | return 1; |
| | | } |
| | | |
| | | if (env.TERM === 'dumb') { |
| | | return min; |
| | | } |
| | | |
| | | return min; |
| | | } |
| | | |
| | | function getSupportLevel(stream) { |
| | | const level = supportsColor(stream); |
| | | const level = supportsColor(stream, stream && stream.isTTY); |
| | | return translateLevel(level); |
| | | } |
| | | |
| | | module.exports = { |
| | | supportsColor: getSupportLevel, |
| | | stdout: getSupportLevel(process.stdout), |
| | | stderr: getSupportLevel(process.stderr) |
| | | stdout: translateLevel(supportsColor(true, tty.isatty(1))), |
| | | stderr: translateLevel(supportsColor(true, tty.isatty(2))) |
| | | }; |