import { readFileSync } from "node:fs"; export type Platform = "linux" | "macos" | "windows" | "wsl" | "other"; export type ProcVersionReader = () => string; export function readProcVersionSync(): string { try { return readFileSync("/proc/version", "utf8"); } catch { return ""; } } export function isWsl( env: Readonly> = process.env, readProcVersion: ProcVersionReader = readProcVersionSync, ): boolean { if (env.WSL_DISTRO_NAME || env.WSL_INTEROP || env.WSLENV) return true; try { return /(?:microsoft|microsoft-standard)/iu.test(readProcVersion()); } catch { return false; } } export function detectPlatform( platform: string = process.platform, env: Readonly> = process.env, readProcVersion: ProcVersionReader = readProcVersionSync, ): Platform { if (platform === "win32") return "windows"; if (platform === "darwin") return "macos"; if (platform === "linux") return isWsl(env, readProcVersion) ? "wsl" : "linux"; return "other"; }