π File detail
utils/binaryCheck.ts
π§© .tsπ 54 linesπΎ 1,466 bytesπ text
β Back to All Filesπ― Use case
This file lives under βutils/β, which covers cross-cutting helpers (shell, tempfiles, settings, messages, process input, β¦). On the API surface it exposes isBinaryInstalled and clearBinaryCache β mainly functions, hooks, or classes. It composes internal code from debug and which (relative imports).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import { logForDebugging } from './debug.js' import { which } from './which.js' // Session cache to avoid repeated checks const binaryCache = new Map<string, boolean>()
π€ Exports (heuristic)
isBinaryInstalledclearBinaryCache
π₯οΈ Source preview
import { logForDebugging } from './debug.js'
import { which } from './which.js'
// Session cache to avoid repeated checks
const binaryCache = new Map<string, boolean>()
/**
* Check if a binary/command is installed and available on the system.
* Uses 'which' on Unix systems (macOS, Linux, WSL) and 'where' on Windows.
*
* @param command - The command name to check (e.g., 'gopls', 'rust-analyzer')
* @returns Promise<boolean> - true if the command exists, false otherwise
*/
export async function isBinaryInstalled(command: string): Promise<boolean> {
// Edge case: empty or whitespace-only command
if (!command || !command.trim()) {
logForDebugging('[binaryCheck] Empty command provided, returning false')
return false
}
// Trim the command to handle whitespace
const trimmedCommand = command.trim()
// Check cache first
const cached = binaryCache.get(trimmedCommand)
if (cached !== undefined) {
logForDebugging(
`[binaryCheck] Cache hit for '${trimmedCommand}': ${cached}`,
)
return cached
}
let exists = false
if (await which(trimmedCommand).catch(() => null)) {
exists = true
}
// Cache the result
binaryCache.set(trimmedCommand, exists)
logForDebugging(
`[binaryCheck] Binary '${trimmedCommand}' ${exists ? 'found' : 'not found'}`,
)
return exists
}
/**
* Clear the binary check cache (useful for testing)
*/
export function clearBinaryCache(): void {
binaryCache.clear()
}