112 lines
3.1 KiB
JavaScript
112 lines
3.1 KiB
JavaScript
const os = require('os');
|
|
const childProcess = require('child_process');
|
|
|
|
class SystemInfo {
|
|
constructor() {
|
|
this.platform = os.platform(); // 'win32', 'darwin', 'linux'
|
|
this.release = os.release(); // OS version
|
|
this.arch = os.arch(); // 'arm', 'arm64', 'x64', 'x86'
|
|
this.versionInfo = this._getVersionInfo(); // Parsed version
|
|
}
|
|
|
|
// Check if current system is Windows
|
|
isWin() {
|
|
return this.platform === 'win32';
|
|
}
|
|
|
|
// Check if current system is macOS
|
|
isMac() {
|
|
return this.platform === 'darwin';
|
|
}
|
|
|
|
// Check if current system is Linux
|
|
isLinux() {
|
|
return this.platform === 'linux';
|
|
}
|
|
|
|
// Check if current system architecture is ARM
|
|
isARM() {
|
|
return this.arch === 'arm';
|
|
}
|
|
|
|
// Check if current system architecture is ARM64
|
|
isARM64() {
|
|
return this.arch === 'arm64';
|
|
}
|
|
|
|
// Check if current system architecture is x64
|
|
isX64() {
|
|
return this.arch === 'x64';
|
|
}
|
|
|
|
// Check if current system architecture is x86
|
|
isX86() {
|
|
return this.arch === 'x86';
|
|
}
|
|
|
|
// Compare if current version is later than the given version
|
|
laterThan(compareVersion) {
|
|
const current = this.versionInfo;
|
|
const compare = this._parseVersion(compareVersion);
|
|
|
|
for (let i = 0; i < current.length; i++) {
|
|
if ((current[i] || 0) > (compare[i] || 0)) return true;
|
|
if ((current[i] || 0) < (compare[i] || 0)) return false;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Compare if current version is earlier than the given version
|
|
earlierThan(compareVersion) {
|
|
return !this.laterThan(compareVersion);
|
|
}
|
|
|
|
// Get edition of the os
|
|
getEdition() {
|
|
if (this.isWin()) {
|
|
const edition = childProcess.execSync('wmic os get Caption').toString().trim();
|
|
return edition.split('\n')[1].trim();
|
|
} else {
|
|
return 'N/A';
|
|
}
|
|
}
|
|
|
|
// Private: Parse version strings (e.g., "10.0.19045" -> [10, 0, 19045])
|
|
_parseVersion(version) {
|
|
return version.split('.').map((num) => parseInt(num, 10) || 0);
|
|
}
|
|
|
|
// Private: Get detailed version info based on platform
|
|
_getVersionInfo() {
|
|
if (this.isWin()) {
|
|
// Windows version is already available via os.release()
|
|
return this._parseVersion(this.release);
|
|
} else if (this.isMac()) {
|
|
// Get macOS version via 'sw_vers'
|
|
const version = childProcess.execSync('sw_vers -productVersion').toString().trim();
|
|
return this._parseVersion(version);
|
|
} else if (this.isLinux()) {
|
|
// Use 'uname -r' for kernel version
|
|
const version = childProcess.execSync('uname -r').toString().trim();
|
|
return this._parseVersion(version);
|
|
} else {
|
|
return [0, 0, 0]; // Unknown system
|
|
}
|
|
}
|
|
|
|
// Get current version as a string (e.g., "10.15.7")
|
|
getVersion() {
|
|
return this.versionInfo.join('.');
|
|
}
|
|
}
|
|
|
|
module.exports = SystemInfo;
|
|
|
|
// Usage Example
|
|
//const sys = new SystemInfo();
|
|
//console.log(`Is Windows: ${sys.isWin()}`);
|
|
//console.log(`Is macOS: ${sys.isMac()}`);
|
|
//console.log(`Is Linux: ${sys.isLinux()}`);
|
|
//console.log(`Current Version Info: ${sys.getVersion()}`);
|
|
//console.log(`Later than 10.0.19044: ${sys.laterThan('10.0.19044')}`);
|
|
//console.log(`Later than 5.15.0 (Linux Kernel): ${sys.laterThan('5.15.0')}`);
|