From c74f2c3088b20591aae6181ab711ab9685d04d62 Mon Sep 17 00:00:00 2001 From: paladox Date: Thu, 22 Sep 2016 16:24:11 +0100 Subject: [PATCH 01/18] Update supports-colors.js --- lib/system/supports-colors.js | 106 +++++++++++++++++++--------------- 1 file changed, 59 insertions(+), 47 deletions(-) diff --git a/lib/system/supports-colors.js b/lib/system/supports-colors.js index 3e008aa..aa2f841 100644 --- a/lib/system/supports-colors.js +++ b/lib/system/supports-colors.js @@ -1,61 +1,73 @@ -/* -The MIT License (MIT) +'use strict'; +var hasFlag = require('has-flag'); -Copyright (c) Sindre Sorhus (sindresorhus.com) +var support = function (level) { + if (level === 0) { + return false; + } -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: + return { + level: level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +}; -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +var supportLevel = (function () { + if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false')) { + return 0; + } -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. + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; + } -*/ + if (hasFlag('color=256')) { + return 2; + } -var argv = process.argv; + if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + return 1; + } -module.exports = (function () { - if (argv.indexOf('--no-color') !== -1 || - argv.indexOf('--color=false') !== -1) { - return false; - } + if (process.stdout && !process.stdout.isTTY) { + return 0; + } - if (argv.indexOf('--color') !== -1 || - argv.indexOf('--color=true') !== -1 || - argv.indexOf('--color=always') !== -1) { - return true; - } + if (process.platform === 'win32') { + return 1; + } - if (process.stdout && !process.stdout.isTTY) { - return false; - } + if ('COLORTERM' in process.env) { + return 1; + } - if (process.platform === 'win32') { - return true; - } + if (process.env.TERM === 'dumb') { + return 0; + } - if ('COLORTERM' in process.env) { - return true; - } + if (/^xterm-256(?:color)?/.test(process.env.TERM)) { + return 2; + } - if (process.env.TERM === 'dumb') { - return false; - } + if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { + return 1; + } - if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { - return true; - } + return 0; +})(); + +if (supportLevel === 0 && 'FORCE_COLOR' in process.env) { + supportLevel = 1; +} + +module.exports = process && support(supportLevel); - return false; -})(); \ No newline at end of file From 4dbe3933ed88330c43992dee14393091a9b9c1b7 Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 00:25:47 +0000 Subject: [PATCH 02/18] Update supports-colors.js --- lib/system/supports-colors.js | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/system/supports-colors.js b/lib/system/supports-colors.js index aa2f841..12e6cd3 100644 --- a/lib/system/supports-colors.js +++ b/lib/system/supports-colors.js @@ -1,3 +1,28 @@ +/* +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (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'; var hasFlag = require('has-flag'); @@ -46,6 +71,10 @@ var supportLevel = (function () { return 1; } + if ('CI' in process.env || 'TEAMCITY_VERSION' in process.env) { + return 0; + } + if ('COLORTERM' in process.env) { return 1; } @@ -70,4 +99,3 @@ if (supportLevel === 0 && 'FORCE_COLOR' in process.env) { } module.exports = process && support(supportLevel); - From 7bf2511fb392db2dafdddd5a78b7d34a3d44e290 Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 00:26:25 +0000 Subject: [PATCH 03/18] Update supports-colors.js --- lib/system/supports-colors.js | 111 +++++++++++++++++++++++++--------- 1 file changed, 82 insertions(+), 29 deletions(-) diff --git a/lib/system/supports-colors.js b/lib/system/supports-colors.js index 12e6cd3..b39a1e7 100644 --- a/lib/system/supports-colors.js +++ b/lib/system/supports-colors.js @@ -24,25 +24,41 @@ THE SOFTWARE. */ 'use strict'; -var hasFlag = require('has-flag'); +const os = require('os'); +const hasFlag = require('has-flag'); -var support = function (level) { +const env = process.env; + +let forceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false')) { + forceColor = false; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + forceColor = true; +} +if ('FORCE_COLOR' in env) { + forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0; +} + +function translateLevel(level) { if (level === 0) { return false; } return { - level: level, + level, hasBasic: true, has256: level >= 2, has16m: level >= 3 }; -}; +} -var supportLevel = (function () { - if (hasFlag('no-color') || - hasFlag('no-colors') || - hasFlag('color=false')) { +function supportsColor(stream) { + if (forceColor === false) { return 0; } @@ -56,46 +72,83 @@ var supportLevel = (function () { return 2; } - if (hasFlag('color') || - hasFlag('colors') || - hasFlag('color=true') || - hasFlag('color=always')) { - return 1; - } - - if (process.stdout && !process.stdout.isTTY) { + if (stream && !stream.isTTY && forceColor !== true) { return 0; } + const min = forceColor ? 1 : 0; + 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. + const osRelease = os.release().split('.'); + if ( + Number(process.versions.node.split('.')[0]) >= 8 && + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + return 1; } - if ('CI' in process.env || 'TEAMCITY_VERSION' in process.env) { - return 0; + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } + + return min; } - if ('COLORTERM' in process.env) { - return 1; + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; } - if (process.env.TERM === 'dumb') { - return 0; + if ('TERM_PROGRAM' in env) { + const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Hyper': + return 3; + case 'Apple_Terminal': + return 2; + // No default + } } - if (/^xterm-256(?:color)?/.test(process.env.TERM)) { + if (/-256(color)?$/i.test(env.TERM)) { return 2; } - if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { + if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { return 1; } - return 0; -})(); + if ('COLORTERM' in env) { + return 1; + } -if (supportLevel === 0 && 'FORCE_COLOR' in process.env) { - supportLevel = 1; + if (env.TERM === 'dumb') { + return min; + } + + return min; } -module.exports = process && support(supportLevel); +function getSupportLevel(stream) { + const level = supportsColor(stream); + return translateLevel(level); +} + +module.exports = { + supportsColor: getSupportLevel, + stdout: getSupportLevel(process.stdout), + stderr: getSupportLevel(process.stderr) +}; From ca0c69fb8bd6e8d76ad0417160cfe551e54000d4 Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 00:27:23 +0000 Subject: [PATCH 04/18] Update package.json --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index c365064..7874fd2 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,9 @@ "node": ">=0.1.90" }, "main": "lib", + "dependencies": { + "has-flag": "^3.0.0" + }, "files": [ "examples", "lib", From 431627771e1617a729a099b2507539f5c1115a7a Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 00:35:13 +0000 Subject: [PATCH 05/18] Create has-flag.js --- lib/system/has-flag.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 lib/system/has-flag.js diff --git a/lib/system/has-flag.js b/lib/system/has-flag.js new file mode 100644 index 0000000..541c4e1 --- /dev/null +++ b/lib/system/has-flag.js @@ -0,0 +1,20 @@ +/* +MIT License + +Copyright (c) Sindre Sorhus (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'; +module.exports = (flag, argv) => { + argv = argv || process.argv; + const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); + const pos = argv.indexOf(prefix + flag); + const terminatorPos = argv.indexOf('--'); + return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); +}; From 2b739138b3b016c70ceb7c04fb86a04f68dbb170 Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 00:35:35 +0000 Subject: [PATCH 06/18] Update supports-colors.js --- lib/system/supports-colors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/system/supports-colors.js b/lib/system/supports-colors.js index b39a1e7..26b4cbd 100644 --- a/lib/system/supports-colors.js +++ b/lib/system/supports-colors.js @@ -25,7 +25,7 @@ THE SOFTWARE. 'use strict'; const os = require('os'); -const hasFlag = require('has-flag'); +const hasFlag = require('./has-flag.js'); const env = process.env; From 34a3d33de18f8935692de9dfaac695e5a0452306 Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 00:35:46 +0000 Subject: [PATCH 07/18] Update package.json --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index a1ed764..e26e29d 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,6 @@ "node": ">=0.1.90" }, "main": "lib/index.js", - "dependencies": { - "has-flag": "^3.0.0" - }, "files": [ "examples", "lib", From 2dc605c8cd8fa3379fe45ea6fc16ea0100331b27 Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 00:47:45 +0000 Subject: [PATCH 08/18] Update supports-colors.js --- lib/system/supports-colors.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/system/supports-colors.js b/lib/system/supports-colors.js index 26b4cbd..67802ad 100644 --- a/lib/system/supports-colors.js +++ b/lib/system/supports-colors.js @@ -24,10 +24,10 @@ THE SOFTWARE. */ 'use strict'; -const os = require('os'); -const hasFlag = require('./has-flag.js'); +var os = require('os'); +var hasFlag = require('./has-flag.js'); -const env = process.env; +var env = process.env; let forceColor; if (hasFlag('no-color') || @@ -85,7 +85,7 @@ function supportsColor(stream) { // 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. - const osRelease = os.release().split('.'); + var osRelease = os.release().split('.'); if ( Number(process.versions.node.split('.')[0]) >= 8 && Number(osRelease[0]) >= 10 && @@ -110,7 +110,7 @@ function supportsColor(stream) { } if ('TERM_PROGRAM' in env) { - const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); switch (env.TERM_PROGRAM) { case 'iTerm.app': From 8d1da39bb4ba14f176dd3b28307b1ad2ed41af5d Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 00:48:12 +0000 Subject: [PATCH 09/18] Update has-flag.js --- lib/system/has-flag.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/system/has-flag.js b/lib/system/has-flag.js index 541c4e1..c9698f8 100644 --- a/lib/system/has-flag.js +++ b/lib/system/has-flag.js @@ -11,10 +11,10 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI */ 'use strict'; -module.exports = (flag, argv) => { +module.exports = function(flag, argv) { argv = argv || process.argv; - const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); - const pos = argv.indexOf(prefix + flag); - const terminatorPos = argv.indexOf('--'); - return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); + var prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); + var pos = argv.indexOf(prefix + flag); + var terminatorPos = argv.indexOf('--'); + var pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); }; From f7227f2e87d74bfa71683e217773d9afe240574a Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 00:51:51 +0000 Subject: [PATCH 10/18] Update has-flag.js --- lib/system/has-flag.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/system/has-flag.js b/lib/system/has-flag.js index c9698f8..e70d7db 100644 --- a/lib/system/has-flag.js +++ b/lib/system/has-flag.js @@ -11,10 +11,10 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI */ 'use strict'; -module.exports = function(flag, argv) { - argv = argv || process.argv; - var prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); - var pos = argv.indexOf(prefix + flag); +module.exports = function (flag, argv) { var terminatorPos = argv.indexOf('--'); - var pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); + var prefix = /^-{1,2}/.test(flag) ? '' : '--'; + var pos = argv.indexOf(prefix + flag); + + return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); }; From a0bb4041638d287e59172fd883797fdd632cf013 Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 00:54:30 +0000 Subject: [PATCH 11/18] Update has-flag.js --- lib/system/has-flag.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/system/has-flag.js b/lib/system/has-flag.js index e70d7db..84958fa 100644 --- a/lib/system/has-flag.js +++ b/lib/system/has-flag.js @@ -12,6 +12,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI 'use strict'; module.exports = function (flag, argv) { + argv = argv || process.argv; var terminatorPos = argv.indexOf('--'); var prefix = /^-{1,2}/.test(flag) ? '' : '--'; var pos = argv.indexOf(prefix + flag); From 493733638d8ca986a3b0dd911911f298cbb8ba27 Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 00:58:15 +0000 Subject: [PATCH 12/18] Update supports-colors.js --- lib/system/supports-colors.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/system/supports-colors.js b/lib/system/supports-colors.js index 67802ad..68034fc 100644 --- a/lib/system/supports-colors.js +++ b/lib/system/supports-colors.js @@ -29,7 +29,7 @@ var hasFlag = require('./has-flag.js'); var env = process.env; -let forceColor; +var forceColor; if (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false')) { @@ -50,7 +50,7 @@ function translateLevel(level) { } return { - level, + level: level, hasBasic: true, has256: level >= 2, has16m: level >= 3 From 2c38a68a7c3038848bc5618b11472a305142c643 Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 01:02:05 +0000 Subject: [PATCH 13/18] Update supports-colors.js --- lib/system/supports-colors.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/system/supports-colors.js b/lib/system/supports-colors.js index 68034fc..d2b02a3 100644 --- a/lib/system/supports-colors.js +++ b/lib/system/supports-colors.js @@ -76,7 +76,7 @@ function supportsColor(stream) { return 0; } - const min = forceColor ? 1 : 0; + var min = forceColor ? 1 : 0; if (process.platform === 'win32') { // Node.js 7.5.0 is the first version of Node.js to include a patch to @@ -143,7 +143,7 @@ function supportsColor(stream) { } function getSupportLevel(stream) { - const level = supportsColor(stream); + var level = supportsColor(stream); return translateLevel(level); } From 007f4d1cd5bb8ec62dc0eeb3a2afe388778bebca Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 01:09:26 +0000 Subject: [PATCH 14/18] Update supports-colors.js --- lib/system/supports-colors.js | 107 ++++++++-------------------------- 1 file changed, 25 insertions(+), 82 deletions(-) diff --git a/lib/system/supports-colors.js b/lib/system/supports-colors.js index d2b02a3..48509a6 100644 --- a/lib/system/supports-colors.js +++ b/lib/system/supports-colors.js @@ -24,27 +24,9 @@ THE SOFTWARE. */ 'use strict'; -var os = require('os'); var hasFlag = require('./has-flag.js'); -var env = process.env; - -var forceColor; -if (hasFlag('no-color') || - hasFlag('no-colors') || - hasFlag('color=false')) { - forceColor = false; -} else if (hasFlag('color') || - hasFlag('colors') || - hasFlag('color=true') || - hasFlag('color=always')) { - forceColor = true; -} -if ('FORCE_COLOR' in env) { - forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0; -} - -function translateLevel(level) { +var support = function (level) { if (level === 0) { return false; } @@ -55,10 +37,12 @@ function translateLevel(level) { has256: level >= 2, has16m: level >= 3 }; -} +}; -function supportsColor(stream) { - if (forceColor === false) { +var supportLevel = (function () { + if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false')) { return 0; } @@ -72,83 +56,42 @@ function supportsColor(stream) { return 2; } - if (stream && !stream.isTTY && forceColor !== true) { + if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + return 1; + } + + if (process.stdout && !process.stdout.isTTY) { return 0; } - var min = forceColor ? 1 : 0; - 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. - var osRelease = os.release().split('.'); - if ( - Number(process.versions.node.split('.')[0]) >= 8 && - Number(osRelease[0]) >= 10 && - Number(osRelease[2]) >= 10586 - ) { - return Number(osRelease[2]) >= 14931 ? 3 : 2; - } - return 1; } - if ('CI' in env) { - if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { - return 1; - } - - return min; + if ('COLORTERM' in process.env) { + return 1; } - if ('TEAMCITY_VERSION' in env) { - return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + if (process.env.TERM === 'dumb') { + return 0; } - if ('TERM_PROGRAM' in env) { - var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); - - switch (env.TERM_PROGRAM) { - case 'iTerm.app': - return version >= 3 ? 3 : 2; - case 'Hyper': - return 3; - case 'Apple_Terminal': - return 2; - // No default - } - } - - if (/-256(color)?$/i.test(env.TERM)) { + if (/^xterm-256(?:color)?/.test(process.env.TERM)) { return 2; } - if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { return 1; } - if ('COLORTERM' in env) { - return 1; - } + return 0; +})(); - if (env.TERM === 'dumb') { - return min; - } - - return min; +if (supportLevel === 0 && 'FORCE_COLOR' in process.env) { + supportLevel = 1; } -function getSupportLevel(stream) { - var level = supportsColor(stream); - return translateLevel(level); -} - -module.exports = { - supportsColor: getSupportLevel, - stdout: getSupportLevel(process.stdout), - stderr: getSupportLevel(process.stderr) -}; +module.exports = process && support(supportLevel); From fdd9b55cd189a4046502ca499f085a6d9ca1a6c8 Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 01:10:20 +0000 Subject: [PATCH 15/18] Update has-flag.js --- lib/system/has-flag.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/system/has-flag.js b/lib/system/has-flag.js index 84958fa..6097003 100644 --- a/lib/system/has-flag.js +++ b/lib/system/has-flag.js @@ -13,8 +13,9 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI 'use strict'; module.exports = function (flag, argv) { argv = argv || process.argv; + var terminatorPos = argv.indexOf('--'); - var prefix = /^-{1,2}/.test(flag) ? '' : '--'; + var prefix = /^-{1,2}/.test(flag) ? '' : '--'; var pos = argv.indexOf(prefix + flag); return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); From e90c3c508873de4fc7a1699968687e79628aa59e Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 02:11:16 +0000 Subject: [PATCH 16/18] Update supports-colors.js --- lib/system/supports-colors.js | 106 +++++++++++++++++++++++++--------- 1 file changed, 78 insertions(+), 28 deletions(-) diff --git a/lib/system/supports-colors.js b/lib/system/supports-colors.js index 48509a6..f351bae 100644 --- a/lib/system/supports-colors.js +++ b/lib/system/supports-colors.js @@ -24,9 +24,23 @@ THE SOFTWARE. */ 'use strict'; + +var os = require('os'); var hasFlag = require('./has-flag.js'); -var support = function (level) { +var env = process.env; + +var forceColor = void 0; +if (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false')) { + forceColor = false; +} else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true') || hasFlag('color=always')) { + forceColor = true; +} +if ('FORCE_COLOR' in env) { + forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0; +} + +function translateLevel(level) { if (level === 0) { return false; } @@ -37,18 +51,14 @@ var support = function (level) { has256: level >= 2, has16m: level >= 3 }; -}; +} -var supportLevel = (function () { - if (hasFlag('no-color') || - hasFlag('no-colors') || - hasFlag('color=false')) { +function supportsColor(stream) { + if (forceColor === false) { return 0; } - if (hasFlag('color=16m') || - hasFlag('color=full') || - hasFlag('color=truecolor')) { + if (hasFlag('color=16m') || hasFlag('color=full') || hasFlag('color=truecolor')) { return 3; } @@ -56,42 +66,82 @@ var supportLevel = (function () { return 2; } - if (hasFlag('color') || - hasFlag('colors') || - hasFlag('color=true') || - hasFlag('color=always')) { - return 1; - } - - if (process.stdout && !process.stdout.isTTY) { + if (stream && !stream.isTTY && forceColor !== true) { return 0; } + var min = forceColor ? 1 : 0; + 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. + var osRelease = os.release().split('.'); + if (Number(process.versions.node.split('.')[0]) >= 8 && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + return 1; } - if ('COLORTERM' in process.env) { - return 1; + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(function (sign) { + return sign in env; + }) || env.CI_NAME === 'codeship') { + return 1; + } + + return min; } - if (process.env.TERM === 'dumb') { - return 0; + if ('TEAMCITY_VERSION' in env) { + return (/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0 + ); } - if (/^xterm-256(?:color)?/.test(process.env.TERM)) { + if ('TERM_PROGRAM' in env) { + var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Hyper': + return 3; + case 'Apple_Terminal': + return 2; + // No default + } + } + + if (/-256(color)?$/i.test(env.TERM)) { return 2; } - if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { + if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { return 1; } - return 0; -})(); + if ('COLORTERM' in env) { + return 1; + } -if (supportLevel === 0 && 'FORCE_COLOR' in process.env) { - supportLevel = 1; + if (env.TERM === 'dumb') { + return min; + } + + return min; } -module.exports = process && support(supportLevel); +function getSupportLevel(stream) { + var level = supportsColor(stream); + return translateLevel(level); +} + +module.exports = { + supportsColor: getSupportLevel, + stdout: getSupportLevel(process.stdout), + stderr: getSupportLevel(process.stderr) +}; From 24ab40b4ad043f813691ecd7ef9f6aaa4740951e Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 02:12:04 +0000 Subject: [PATCH 17/18] Update has-flag.js --- lib/system/has-flag.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/system/has-flag.js b/lib/system/has-flag.js index 6097003..df0f8c9 100644 --- a/lib/system/has-flag.js +++ b/lib/system/has-flag.js @@ -11,12 +11,11 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI */ 'use strict'; + module.exports = function (flag, argv) { argv = argv || process.argv; - - var terminatorPos = argv.indexOf('--'); - var prefix = /^-{1,2}/.test(flag) ? '' : '--'; + var prefix = flag.startsWith('-') ? '' : flag.length === 1 ? '-' : '--'; var pos = argv.indexOf(prefix + flag); - + var terminatorPos = argv.indexOf('--'); return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); }; From fccafd2ad8a762b012edf3462d845b94785edb35 Mon Sep 17 00:00:00 2001 From: paladox Date: Wed, 14 Feb 2018 02:17:48 +0000 Subject: [PATCH 18/18] Update has-flag.js --- lib/system/has-flag.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/system/has-flag.js b/lib/system/has-flag.js index df0f8c9..0ebdbf5 100644 --- a/lib/system/has-flag.js +++ b/lib/system/has-flag.js @@ -14,8 +14,10 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI module.exports = function (flag, argv) { argv = argv || process.argv; - var prefix = flag.startsWith('-') ? '' : flag.length === 1 ? '-' : '--'; - var pos = argv.indexOf(prefix + flag); + var terminatorPos = argv.indexOf('--'); + var prefix = /^-{1,2}/.test(flag) ? '' : '--'; + var pos = argv.indexOf(prefix + flag); + return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); };