π File detail
ink/supports-hyperlinks.ts
π― Use case
This file lives under βink/β, which covers Ink terminal UI (layouts, TTY IO, keyboard, renderer components). On the API surface it exposes ADDITIONAL_HYPERLINK_TERMINALS and supportsHyperlinks β mainly functions, hooks, or classes. Dependencies touch supports-hyperlinks. What the file header says: Additional terminals that support OSC 8 hyperlinks but aren't detected by supports-hyperlinks. Checked against both TERM_PROGRAM and LC_TERMINAL (the latter is preserved inside tmux).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
Additional terminals that support OSC 8 hyperlinks but aren't detected by supports-hyperlinks. Checked against both TERM_PROGRAM and LC_TERMINAL (the latter is preserved inside tmux).
π€ Exports (heuristic)
ADDITIONAL_HYPERLINK_TERMINALSsupportsHyperlinks
π External import roots
Package roots from from "β¦" (relative paths omitted).
supports-hyperlinks
π₯οΈ Source preview
import supportsHyperlinksLib from 'supports-hyperlinks'
// Additional terminals that support OSC 8 hyperlinks but aren't detected by supports-hyperlinks.
// Checked against both TERM_PROGRAM and LC_TERMINAL (the latter is preserved inside tmux).
export const ADDITIONAL_HYPERLINK_TERMINALS = [
'ghostty',
'Hyper',
'kitty',
'alacritty',
'iTerm.app',
'iTerm2',
]
type EnvLike = Record<string, string | undefined>
type SupportsHyperlinksOptions = {
env?: EnvLike
stdoutSupported?: boolean
}
/**
* Returns whether stdout supports OSC 8 hyperlinks.
* Extends the supports-hyperlinks library with additional terminal detection.
* @param options Optional overrides for testing (env, stdoutSupported)
*/
export function supportsHyperlinks(
options?: SupportsHyperlinksOptions,
): boolean {
const stdoutSupported =
options?.stdoutSupported ?? supportsHyperlinksLib.stdout
if (stdoutSupported) {
return true
}
const env = options?.env ?? process.env
// Check for additional terminals not detected by supports-hyperlinks
const termProgram = env['TERM_PROGRAM']
if (termProgram && ADDITIONAL_HYPERLINK_TERMINALS.includes(termProgram)) {
return true
}
// LC_TERMINAL is set by some terminals (e.g. iTerm2) and preserved inside tmux,
// where TERM_PROGRAM is overwritten to 'tmux'.
const lcTerminal = env['LC_TERMINAL']
if (lcTerminal && ADDITIONAL_HYPERLINK_TERMINALS.includes(lcTerminal)) {
return true
}
// Kitty sets TERM=xterm-kitty
const term = env['TERM']
if (term?.includes('kitty')) {
return true
}
return false
}