diff options
author | Ruben Bridgewater <ruben@bridgewater.de> | 2018-04-01 11:27:01 +0200 |
---|---|---|
committer | Ruben Bridgewater <ruben@bridgewater.de> | 2018-04-04 15:14:04 +0200 |
commit | 1b715221b9b875fc24d6aae3480c4c55d7f3dd76 (patch) | |
tree | 27fa919b768860e575761b1ec5224214964311c9 /lib/internal/tty.js | |
parent | 3d61e14704bb82ffc1442e6f6c3756f4432b03b4 (diff) | |
download | android-node-v8-1b715221b9b875fc24d6aae3480c4c55d7f3dd76.tar.gz android-node-v8-1b715221b9b875fc24d6aae3480c4c55d7f3dd76.tar.bz2 android-node-v8-1b715221b9b875fc24d6aae3480c4c55d7f3dd76.zip |
tty: add attribution for chalk
This adds attributions for the getColorDepth function as it got
inspired by https://github.com/chalk/supports-color and more sources.
PR-URL: https://github.com/nodejs/node/pull/19730
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Diffstat (limited to 'lib/internal/tty.js')
-rw-r--r-- | lib/internal/tty.js | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/lib/internal/tty.js b/lib/internal/tty.js new file mode 100644 index 0000000000..a581ac312f --- /dev/null +++ b/lib/internal/tty.js @@ -0,0 +1,104 @@ +// MIT License + +// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com) + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +'use strict'; + +const { release } = require('os'); + +const OSRelease = release().split('.'); + +const COLORS_2 = 1; +const COLORS_16 = 4; +const COLORS_256 = 8; +const COLORS_16m = 24; + +// The `getColorDepth` API got inspired by multiple sources such as +// https://github.com/chalk/supports-color, +// https://github.com/isaacs/color-support. +function getColorDepth(env = process.env) { + if (env.NODE_DISABLE_COLORS || env.TERM === 'dumb' && !env.COLORTERM) { + return COLORS_2; + } + + if (process.platform === 'win32') { + // 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. + if (+OSRelease[0] >= 10) { + const build = +OSRelease[2]; + if (build >= 14931) + return COLORS_16m; + if (build >= 10586) + return COLORS_256; + } + + return COLORS_16; + } + + if (env.TMUX) { + return COLORS_256; + } + + if (env.CI) { + if ('TRAVIS' in env || 'CIRCLECI' in env || 'APPVEYOR' in env || + 'GITLAB_CI' in env || env.CI_NAME === 'codeship') { + return COLORS_256; + } + return COLORS_2; + } + + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? + COLORS_16 : COLORS_2; + } + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + if (!env.TERM_PROGRAM_VERSION || + /^[0-2]\./.test(env.TERM_PROGRAM_VERSION)) { + return COLORS_256; + } + return COLORS_16m; + case 'HyperTerm': + case 'Hyper': + case 'MacTerm': + return COLORS_16m; + case 'Apple_Terminal': + return COLORS_256; + } + + if (env.TERM) { + if (/^xterm-256/.test(env.TERM)) + return COLORS_256; + if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)) + return COLORS_16; + } + + if (env.COLORTERM) + return COLORS_16; + + return COLORS_2; +} + +module.exports = { + getColorDepth +}; |