You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.0 KiB
95 lines
2.0 KiB
'use strict'; |
|
const supportsColor = require('supports-color'); |
|
const hasFlag = require('has-flag'); |
|
|
|
function parseVersion(versionString) { |
|
if (/^\d{3,4}$/.test(versionString)) { |
|
// Env var doesn't always use dots. example: 4601 => 46.1.0 |
|
const m = /(\d{1,2})(\d{2})/.exec(versionString); |
|
return { |
|
major: 0, |
|
minor: parseInt(m[1], 10), |
|
patch: parseInt(m[2], 10) |
|
}; |
|
} |
|
|
|
const versions = (versionString || '').split('.').map(n => parseInt(n, 10)); |
|
return { |
|
major: versions[0], |
|
minor: versions[1], |
|
patch: versions[2] |
|
}; |
|
} |
|
|
|
function supportsHyperlink(stream) { |
|
const {env} = process; |
|
|
|
if ('FORCE_HYPERLINK' in env) { |
|
return !(env.FORCE_HYPERLINK.length > 0 && parseInt(env.FORCE_HYPERLINK, 10) === 0); |
|
} |
|
|
|
if (hasFlag('no-hyperlink') || hasFlag('no-hyperlinks') || hasFlag('hyperlink=false') || hasFlag('hyperlink=never')) { |
|
return false; |
|
} |
|
|
|
if (hasFlag('hyperlink=true') || hasFlag('hyperlink=always')) { |
|
return true; |
|
} |
|
|
|
// If they specify no colors, they probably don't want hyperlinks. |
|
if (!supportsColor.supportsColor(stream)) { |
|
return false; |
|
} |
|
|
|
if (stream && !stream.isTTY) { |
|
return false; |
|
} |
|
|
|
if (process.platform === 'win32') { |
|
return false; |
|
} |
|
|
|
if ('NETLIFY' in env) { |
|
return true; |
|
} |
|
|
|
if ('CI' in env) { |
|
return false; |
|
} |
|
|
|
if ('TEAMCITY_VERSION' in env) { |
|
return false; |
|
} |
|
|
|
if ('TERM_PROGRAM' in env) { |
|
const version = parseVersion(env.TERM_PROGRAM_VERSION); |
|
|
|
switch (env.TERM_PROGRAM) { |
|
case 'iTerm.app': |
|
if (version.major === 3) { |
|
return version.minor >= 1; |
|
} |
|
|
|
return version.major > 3; |
|
// No default |
|
} |
|
} |
|
|
|
if ('VTE_VERSION' in env) { |
|
// 0.50.0 was supposed to support hyperlinks, but throws a segfault |
|
if (env.VTE_VERSION === '0.50.0') { |
|
return false; |
|
} |
|
|
|
const version = parseVersion(env.VTE_VERSION); |
|
return version.major > 0 || version.minor >= 50; |
|
} |
|
|
|
return false; |
|
} |
|
|
|
module.exports = { |
|
supportsHyperlink, |
|
stdout: supportsHyperlink(process.stdout), |
|
stderr: supportsHyperlink(process.stderr) |
|
};
|
|
|