import os from "node:os"; import type { ServerRuntimeEnvironment } from "@t3tools/contracts"; interface DetectServerRuntimeEnvironmentOptions { readonly platform?: NodeJS.Platform; readonly env?: NodeJS.ProcessEnv; readonly osRelease?: string;} function normalizePlatform(platform: NodeJS.Platform): ServerRuntimeEnvironment["platform"] { switch (platform) { case "win32": return "windows"; case "darwin": return "macos"; default: return "linux"; }} function detectWsl(options: { readonly platform: NodeJS.Platform; readonly env: NodeJS.ProcessEnv; readonly osRelease: string;}): boolean { if (options.platform !== "linux") { return false; } if (options.env.WSL_DISTRO_NAME || options.env.WSL_INTEROP) { return true; } return options.osRelease.toLowerCase().includes("microsoft");} export function detectServerRuntimeEnvironment( options: DetectServerRuntimeEnvironmentOptions = {},): ServerRuntimeEnvironment { const platform = options.platform ?? process.platform; const env = options.env ?? process.env; const osRelease = options.osRelease ?? os.release(); const normalizedPlatform = normalizePlatform(platform); const isWsl = detectWsl({ platform, env, osRelease }); return { platform: normalizedPlatform, pathStyle: normalizedPlatform === "windows" ? "windows" : "posix", isWsl, windowsInteropMode: normalizedPlatform === "windows" ? "windows-native" : isWsl ? "wsl-hosted" : null, wslDistroName: isWsl ? env.WSL_DISTRO_NAME?.trim() || null : null, };}
import os from "node:os";
import type { ServerRuntimeEnvironment } from "@t3tools/contracts";
interface DetectServerRuntimeEnvironmentOptions {
readonly platform?: NodeJS.Platform;
readonly env?: NodeJS.ProcessEnv;
readonly osRelease?: string;
}
function normalizePlatform(platform: NodeJS.Platform): ServerRuntimeEnvironment["platform"] {
switch (platform) {
case "win32":
return "windows";
case "darwin":
return "macos";
default:
return "linux";
}
}
function detectWsl(options: {
readonly platform: NodeJS.Platform;
readonly env: NodeJS.ProcessEnv;
readonly osRelease: string;
}): boolean {
if (options.platform !== "linux") {
return false;
}
if (options.env.WSL_DISTRO_NAME || options.env.WSL_INTEROP) {
return true;
}
return options.osRelease.toLowerCase().includes("microsoft");
}
export function detectServerRuntimeEnvironment(
options: DetectServerRuntimeEnvironmentOptions = {},
): ServerRuntimeEnvironment {
const platform = options.platform ?? process.platform;
const env = options.env ?? process.env;
const osRelease = options.osRelease ?? os.release();
const normalizedPlatform = normalizePlatform(platform);
const isWsl = detectWsl({ platform, env, osRelease });
return {
platform: normalizedPlatform,
pathStyle: normalizedPlatform === "windows" ? "windows" : "posix",
isWsl,
windowsInteropMode: normalizedPlatform === "windows" ? "windows-native" : isWsl ? "wsl-hosted" : null,
wslDistroName: isWsl ? env.WSL_DISTRO_NAME?.trim() || null : null,
};
}