source: frontend/node_modules/supports-hyperlinks/index.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 2.2 KB
Line 
1'use strict';
2const supportsColor = require('supports-color');
3const hasFlag = require('has-flag');
4
5function parseVersion(versionString) {
6 if (/^\d{3,4}$/.test(versionString)) {
7 // Env var doesn't always use dots. example: 4601 => 46.1.0
8 const m = /(\d{1,2})(\d{2})/.exec(versionString);
9 return {
10 major: 0,
11 minor: parseInt(m[1], 10),
12 patch: parseInt(m[2], 10)
13 };
14 }
15
16 const versions = (versionString || '').split('.').map(n => parseInt(n, 10));
17 return {
18 major: versions[0],
19 minor: versions[1],
20 patch: versions[2]
21 };
22}
23
24function supportsHyperlink(stream) {
25 const {env} = process;
26
27 if ('FORCE_HYPERLINK' in env) {
28 return !(env.FORCE_HYPERLINK.length > 0 && parseInt(env.FORCE_HYPERLINK, 10) === 0);
29 }
30
31 if (hasFlag('no-hyperlink') || hasFlag('no-hyperlinks') || hasFlag('hyperlink=false') || hasFlag('hyperlink=never')) {
32 return false;
33 }
34
35 if (hasFlag('hyperlink=true') || hasFlag('hyperlink=always')) {
36 return true;
37 }
38
39 // Netlify does not run a TTY, it does not need `supportsColor` check
40 if ('NETLIFY' in env) {
41 return true;
42 }
43
44 // If they specify no colors, they probably don't want hyperlinks.
45 if (!supportsColor.supportsColor(stream)) {
46 return false;
47 }
48
49 if (stream && !stream.isTTY) {
50 return false;
51 }
52
53 if (process.platform === 'win32') {
54 return false;
55 }
56
57 if ('CI' in env) {
58 return false;
59 }
60
61 if ('TEAMCITY_VERSION' in env) {
62 return false;
63 }
64
65 if ('TERM_PROGRAM' in env) {
66 const version = parseVersion(env.TERM_PROGRAM_VERSION);
67
68 switch (env.TERM_PROGRAM) {
69 case 'iTerm.app':
70 if (version.major === 3) {
71 return version.minor >= 1;
72 }
73
74 return version.major > 3;
75 case 'WezTerm':
76 return version.major >= 20200620;
77 case 'vscode':
78 return version.major > 1 || version.major === 1 && version.minor >= 72;
79 // No default
80 }
81 }
82
83 if ('VTE_VERSION' in env) {
84 // 0.50.0 was supposed to support hyperlinks, but throws a segfault
85 if (env.VTE_VERSION === '0.50.0') {
86 return false;
87 }
88
89 const version = parseVersion(env.VTE_VERSION);
90 return version.major > 0 || version.minor >= 50;
91 }
92
93 return false;
94}
95
96module.exports = {
97 supportsHyperlink,
98 stdout: supportsHyperlink(process.stdout),
99 stderr: supportsHyperlink(process.stderr)
100};
Note: See TracBrowser for help on using the repository browser.