Rust implementation of NextGraph, a Decentralized and local-first web 3.0 ecosystem https://nextgraph.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
nextgraph-rs/ng-sdk-js/js/node.js

122 lines
3.0 KiB

const macNameMap = new Map([
[23, ['Sonoma', '14']],
[22, ['Ventura', '13']],
[21, ['Monterey', '12']],
[20, ['Big Sur', '11']],
[19, ['Catalina', '10.15']],
[18, ['Mojave', '10.14']],
[17, ['High Sierra', '10.13']],
[16, ['Sierra', '10.12']],
[15, ['El Capitan', '10.11']],
[14, ['Yosemite', '10.10']],
[13, ['Mavericks', '10.9']],
[12, ['Mountain Lion', '10.8']],
[11, ['Lion', '10.7']],
[10, ['Snow Leopard', '10.6']],
[9, ['Leopard', '10.5']],
[8, ['Tiger', '10.4']],
[7, ['Panther', '10.3']],
[6, ['Jaguar', '10.2']],
[5, ['Puma', '10.1']],
]);
function macosRelease(release) {
let split = (release).split('.');
rel = Number(split[0]);
let [name, version] = macNameMap.get(rel) || ['Unknown', release];
if (name!='Unknown') {
if (split.length>1) version += '.'+split[1];
//if (split.length>2 && split[2]) version += '.'+split[2];
}
return {
name: "macOS",
versionName: name,
version,
release
};
}
const winNames = new Map([
['10.0.2', '11'], // It's unclear whether future Windows 11 versions will use this version scheme: https://github.com/sindresorhus/windows-release/pull/26/files#r744945281
['10.0.22', 'Server 2022'],
['10.0', '10 or Server 2016/2019'],
['6.3', '8.1 or Server 2012 R2'],
['6.2', '8 or Server 2012'],
['6.1', '7 or Server 2008 R2'],
['6.0', 'Vista or Server 2008'],
['5.2', 'Server 2003'],
['5.1', 'XP'],
['5.0', '2000'],
['4.90', 'ME'],
['4.10', '98'],
['4.03', '95'],
['4.00', '95'],
['3.00', 'NT'],
]);
function windowsRelease(release) {
const version = /(\d+\.\d+)(?:\.(\d+))?/.exec(release);
let ver = version[1] || '';
const build = version[2] || '';
if (ver.startsWith('3.')) {
ver = '3.00';
}
if (ver === '10.0' && build.startsWith('20348')) {
// Windows Server 2022
ver = '10.0.22';
} else if (ver === '10.0' && build.startsWith('2')) {
// Windows 11
ver = '10.0.2';
}
return {
name: "Windows",
versionName: winNames.get(ver),
version: build,
release
};
}
function osName(platform, release) {
if (platform === 'darwin') {
return release? macosRelease(release) : {name: "macOS"};
}
if (platform === 'linux') {
id = release ? release.replace(/^(\d+\.\d+).*/, '$1') : '';
return {name:'Linux', version: id || release, release};
}
if (platform === 'win32') {
return release ? windowsRelease(release) : {name: "Windows"};
}
return {name:platform, version:release};
}
module.exports.version = function () {
return require('../../../package.json').version;
}
module.exports.client_details = function () {
const process = require('process');
const osnode = require('os');
let os = osName(osnode.platform(),osnode.release());
if (osnode.version) os.uname = osnode.version();
os.type = osnode.type();
return JSON.stringify({
platform: { type: "server", arch: osnode.machine? osnode.machine() : process.arch },
os,
engine: {
name: "nodejs",
version: process.version,
arch : process.arch,
versions: process.versions
}
});
};