Skip to content

Commit 7a735be

Browse files
authored
Merge pull request #7198 from Shopify/04-03-04-03-remove-is-interactive
Remove is-interactive, inline the TTY check
2 parents 3efe630 + 5e3d785 commit 7a735be

File tree

4 files changed

+53
-13
lines changed

4 files changed

+53
-13
lines changed

packages/cli-kit/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@
137137
"ignore": "6.0.2",
138138
"ink": "6.8.0",
139139
"is-executable": "2.0.1",
140-
"is-interactive": "2.0.0",
141140
"is-wsl": "3.1.0",
142141
"jose": "5.9.6",
143142
"latest-version": "7.0.0",

packages/cli-kit/src/public/node/context/local.test.ts

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
isDevelopment,
55
isHostedAppsMode,
66
isShopify,
7+
isTerminalInteractive,
78
isUnitTest,
89
analyticsDisabled,
910
cloudEnvironment,
@@ -14,12 +15,62 @@ import {
1415
import {fileExists} from '../fs.js'
1516
import {exec} from '../system.js'
1617

17-
import {expect, describe, vi, test} from 'vitest'
18+
import {afterEach, expect, describe, vi, test} from 'vitest'
1819

1920
vi.mock('../fs.js')
2021
vi.mock('../system.js')
2122
vi.mock('../environment.js')
2223

24+
describe('isTerminalInteractive', () => {
25+
const originalIsTTY = process.stdout.isTTY
26+
const originalEnv = {...process.env}
27+
28+
afterEach(() => {
29+
process.stdout.isTTY = originalIsTTY
30+
process.env.TERM = originalEnv.TERM
31+
if (originalEnv.CI === undefined) {
32+
delete process.env.CI
33+
} else {
34+
process.env.CI = originalEnv.CI
35+
}
36+
})
37+
38+
test('returns true when stdout is a TTY, TERM is not dumb, and not in CI', () => {
39+
process.stdout.isTTY = true
40+
delete process.env.CI
41+
process.env.TERM = 'xterm-256color'
42+
expect(isTerminalInteractive()).toBe(true)
43+
})
44+
45+
test('returns false when stdout is not a TTY', () => {
46+
process.stdout.isTTY = false
47+
delete process.env.CI
48+
process.env.TERM = 'xterm-256color'
49+
expect(isTerminalInteractive()).toBe(false)
50+
})
51+
52+
test('returns false when TERM is dumb', () => {
53+
process.stdout.isTTY = true
54+
delete process.env.CI
55+
process.env.TERM = 'dumb'
56+
expect(isTerminalInteractive()).toBe(false)
57+
})
58+
59+
test('returns false when CI env var is set', () => {
60+
process.stdout.isTTY = true
61+
process.env.CI = 'true'
62+
process.env.TERM = 'xterm-256color'
63+
expect(isTerminalInteractive()).toBe(false)
64+
})
65+
66+
test('returns false when CI env var is empty string (still set)', () => {
67+
process.stdout.isTTY = true
68+
process.env.CI = ''
69+
process.env.TERM = 'xterm-256color'
70+
expect(isTerminalInteractive()).toBe(false)
71+
})
72+
})
73+
2374
describe('isUnitTest', () => {
2475
test('returns true when SHOPIFY_UNIT_TEST is truthy', () => {
2576
// Given

packages/cli-kit/src/public/node/context/local.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {defaultThemeKitAccessDomain, environmentVariables, pathConstants} from '
44
import {fileExists} from '../fs.js'
55
import {exec} from '../system.js'
66

7-
import isInteractive from 'is-interactive'
87
import macaddress from 'macaddress'
98

109
import {homedir} from 'os'
@@ -15,7 +14,7 @@ import {homedir} from 'os'
1514
* @returns True if the terminal is interactive.
1615
*/
1716
export function isTerminalInteractive(): boolean {
18-
return isInteractive()
17+
return Boolean(process.stdout.isTTY && process.env.TERM !== 'dumb' && !('CI' in process.env))
1918
}
2019

2120
/**

pnpm-lock.yaml

Lines changed: 0 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)