mirror of
https://github.com/zadam/trilium.git
synced 2025-11-02 11:26:15 +01:00
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { execSync } from "child_process";
|
|
import { isMac, isWindows } from "../../services/utils";
|
|
import { arch, cpus } from "os";
|
|
|
|
function systemChecks() {
|
|
return {
|
|
isCpuArchMismatch: isCpuArchMismatch()
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Detects if the application is running under emulation on Apple Silicon or Windows on ARM.
|
|
* This happens when an x64 version of the app is run on an M1/M2/M3 Mac or on a Windows Snapdragon chip.
|
|
* @returns true if running on x86 emulation on ARM, false otherwise.
|
|
*/
|
|
export const isCpuArchMismatch = () => {
|
|
if (isMac) {
|
|
try {
|
|
// Use child_process to check sysctl.proc_translated
|
|
// This is the proper way to detect Rosetta 2 translation
|
|
const result = execSync("sysctl -n sysctl.proc_translated 2>/dev/null", {
|
|
encoding: "utf8",
|
|
timeout: 1000
|
|
}).trim();
|
|
|
|
// 1 means the process is being translated by Rosetta 2
|
|
// 0 means native execution
|
|
// If the sysctl doesn't exist (on Intel Macs), this will return empty/error
|
|
return result === "1";
|
|
} catch (error) {
|
|
// If sysctl fails or doesn't exist (Intel Macs), not running under Rosetta 2
|
|
return false;
|
|
}
|
|
} else if (isWindows && arch() === "x64") {
|
|
return cpus().some(cpu =>
|
|
cpu.model.includes('Microsoft SQ') ||
|
|
cpu.model.includes('Snapdragon'));
|
|
} else {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
export default {
|
|
systemChecks
|
|
};
|