aboutsummaryrefslogtreecommitdiff
path: root/node_modules/supports-hyperlinks/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/supports-hyperlinks/index.js')
-rw-r--r--node_modules/supports-hyperlinks/index.js95
1 files changed, 95 insertions, 0 deletions
diff --git a/node_modules/supports-hyperlinks/index.js b/node_modules/supports-hyperlinks/index.js
new file mode 100644
index 0000000..02afb53
--- /dev/null
+++ b/node_modules/supports-hyperlinks/index.js
@@ -0,0 +1,95 @@
+'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)
+};