32 lines
883 B
TypeScript
32 lines
883 B
TypeScript
import { spawnSync } from "node:child_process";
|
|
import os from "node:os";
|
|
|
|
export type OsSummary = {
|
|
platform: NodeJS.Platform;
|
|
arch: string;
|
|
release: string;
|
|
label: string;
|
|
};
|
|
|
|
function safeTrim(value: unknown): string {
|
|
return typeof value === "string" ? value.trim() : "";
|
|
}
|
|
|
|
function macosVersion(): string {
|
|
const res = spawnSync("sw_vers", ["-productVersion"], { encoding: "utf-8" });
|
|
const out = safeTrim(res.stdout);
|
|
return out || os.release();
|
|
}
|
|
|
|
export function resolveOsSummary(): OsSummary {
|
|
const platform = os.platform();
|
|
const release = os.release();
|
|
const arch = os.arch();
|
|
const label = (() => {
|
|
if (platform === "darwin") return `macos ${macosVersion()} (${arch})`;
|
|
if (platform === "win32") return `windows ${release} (${arch})`;
|
|
return `${platform} ${release} (${arch})`;
|
|
})();
|
|
return { platform, arch, release, label };
|
|
}
|