Files
spacedrive/scripts/utils/machineId.mjs
Jamie Pine 14dbd8da61 lint
2026-01-07 21:58:17 -08:00

71 lines
1.7 KiB
JavaScript

import { exec as execCb } from "node:child_process";
import * as os from "node:os";
import { env } from "node:process";
import { promisify } from "node:util";
const __debug = env.NODE_ENV === "debug";
/** @type {'musl' | 'glibc'} */
let libc = "glibc";
if (os.type() === "Linux") {
try {
const exec = promisify(execCb);
if ((await exec("ldd /bin/ls")).stdout.includes("musl")) {
libc = "musl";
}
} catch (error) {
if (__debug) {
console.warn("Failed to check libc type");
console.error(error);
}
}
}
/** @type {Record<string, string>} */
const OS_TYPE = {
darwin: "Darwin",
windows: "Windows_NT",
linux: "Linux",
};
/** @returns {['Darwin' | 'Windows_NT', 'x86_64' | 'aarch64'] | ['Linux', 'x86_64' | 'aarch64', 'musl' | 'glibc']} */
export function getMachineId() {
let _os, _arch;
let _libc = libc;
/**
* Supported TARGET_TRIPLE:
* x86_64-apple-darwin
* aarch64-apple-darwin
* x86_64-pc-windows-msvc
* aarch64-pc-windows-msvc
* x86_64-unknown-linux-gnu
* x86_64-unknown-linux-musl
* aarch64-unknown-linux-gnu
* aarch64-unknown-linux-musl
*/
if (env.TARGET_TRIPLE) {
const target = env.TARGET_TRIPLE.split("-");
_os = OS_TYPE[target[2] ?? ""];
_arch = target[0];
if (_os === "Linux") _libc = target[3]?.includes("musl") ? "musl" : "glibc";
} else {
// Current machine identifiers
_os = os.type();
_arch = os.machine();
if (_arch === "arm64") _arch = "aarch64";
}
if (_arch !== "x86_64" && _arch !== "aarch64")
throw new Error("Unsuported architecture");
if (_os === "Linux") {
return [_os, _arch, _libc];
}
if (_os !== "Darwin" && _os !== "Windows_NT") {
throw new Error("Unsuported OS");
}
return [_os, _arch];
}