123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- // call it on itself so we can test the export val for basic stuff
- module.exports = colorSupport({ alwaysReturn: true }, colorSupport)
- function hasNone (obj, options) {
- obj.level = 0
- obj.hasBasic = false
- obj.has256 = false
- obj.has16m = false
- if (!options.alwaysReturn) {
- return false
- }
- return obj
- }
- function hasBasic (obj) {
- obj.hasBasic = true
- obj.has256 = false
- obj.has16m = false
- obj.level = 1
- return obj
- }
- function has256 (obj) {
- obj.hasBasic = true
- obj.has256 = true
- obj.has16m = false
- obj.level = 2
- return obj
- }
- function has16m (obj) {
- obj.hasBasic = true
- obj.has256 = true
- obj.has16m = true
- obj.level = 3
- return obj
- }
- function colorSupport (options, obj) {
- options = options || {}
- obj = obj || {}
- // if just requesting a specific level, then return that.
- if (typeof options.level === 'number') {
- switch (options.level) {
- case 0:
- return hasNone(obj, options)
- case 1:
- return hasBasic(obj)
- case 2:
- return has256(obj)
- case 3:
- return has16m(obj)
- }
- }
- obj.level = 0
- obj.hasBasic = false
- obj.has256 = false
- obj.has16m = false
- if (typeof process === 'undefined' ||
- !process ||
- !process.stdout ||
- !process.env ||
- !process.platform) {
- return hasNone(obj, options)
- }
- var env = options.env || process.env
- var stream = options.stream || process.stdout
- var term = options.term || env.TERM || ''
- var platform = options.platform || process.platform
- if (!options.ignoreTTY && !stream.isTTY) {
- return hasNone(obj, options)
- }
- if (!options.ignoreDumb && term === 'dumb' && !env.COLORTERM) {
- return hasNone(obj, options)
- }
- if (platform === 'win32') {
- return hasBasic(obj)
- }
- if (env.TMUX) {
- return has256(obj)
- }
- if (!options.ignoreCI && (env.CI || env.TEAMCITY_VERSION)) {
- if (env.TRAVIS) {
- return has256(obj)
- } else {
- return hasNone(obj, options)
- }
- }
- // TODO: add more term programs
- switch (env.TERM_PROGRAM) {
- case 'iTerm.app':
- var ver = env.TERM_PROGRAM_VERSION || '0.'
- if (/^[0-2]\./.test(ver)) {
- return has256(obj)
- } else {
- return has16m(obj)
- }
- case 'HyperTerm':
- case 'Hyper':
- return has16m(obj)
- case 'MacTerm':
- return has16m(obj)
- case 'Apple_Terminal':
- return has256(obj)
- }
- if (/^xterm-256/.test(term)) {
- return has256(obj)
- }
- if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(term)) {
- return hasBasic(obj)
- }
- if (env.COLORTERM) {
- return hasBasic(obj)
- }
- return hasNone(obj, options)
- }
|