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>
This commit is contained in:
parent
3d61e14704
commit
1b715221b9
104
lib/internal/tty.js
Normal file
104
lib/internal/tty.js
Normal file
@ -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
|
||||||
|
};
|
74
lib/tty.js
74
lib/tty.js
@ -27,14 +27,7 @@ const { TTY, isTTY } = process.binding('tty_wrap');
|
|||||||
const errors = require('internal/errors');
|
const errors = require('internal/errors');
|
||||||
const { ERR_INVALID_FD } = errors.codes;
|
const { ERR_INVALID_FD } = errors.codes;
|
||||||
const readline = require('readline');
|
const readline = require('readline');
|
||||||
const { release } = require('os');
|
const { getColorDepth } = require('internal/tty');
|
||||||
|
|
||||||
const OSRelease = release().split('.');
|
|
||||||
|
|
||||||
const COLORS_2 = 1;
|
|
||||||
const COLORS_16 = 4;
|
|
||||||
const COLORS_256 = 8;
|
|
||||||
const COLORS_16m = 24;
|
|
||||||
|
|
||||||
function isatty(fd) {
|
function isatty(fd) {
|
||||||
return Number.isInteger(fd) && fd >= 0 && isTTY(fd);
|
return Number.isInteger(fd) && fd >= 0 && isTTY(fd);
|
||||||
@ -108,70 +101,7 @@ inherits(WriteStream, net.Socket);
|
|||||||
|
|
||||||
WriteStream.prototype.isTTY = true;
|
WriteStream.prototype.isTTY = true;
|
||||||
|
|
||||||
WriteStream.prototype.getColorDepth = function(env = process.env) {
|
WriteStream.prototype.getColorDepth = getColorDepth;
|
||||||
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;
|
|
||||||
};
|
|
||||||
|
|
||||||
WriteStream.prototype._refreshSize = function() {
|
WriteStream.prototype._refreshSize = function() {
|
||||||
const oldCols = this.columns;
|
const oldCols = this.columns;
|
||||||
|
1
node.gyp
1
node.gyp
@ -133,6 +133,7 @@
|
|||||||
'lib/internal/timers.js',
|
'lib/internal/timers.js',
|
||||||
'lib/internal/tls.js',
|
'lib/internal/tls.js',
|
||||||
'lib/internal/trace_events_async_hooks.js',
|
'lib/internal/trace_events_async_hooks.js',
|
||||||
|
'lib/internal/tty.js',
|
||||||
'lib/internal/url.js',
|
'lib/internal/url.js',
|
||||||
'lib/internal/util.js',
|
'lib/internal/util.js',
|
||||||
'lib/internal/util/comparisons.js',
|
'lib/internal/util/comparisons.js',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user