@gjsify/os 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -4
- package/lib/cjs/constants.js +122 -0
- package/lib/cjs/createSubnet.js +17 -0
- package/lib/cjs/darwin.js +115 -0
- package/lib/cjs/index.js +92 -0
- package/lib/cjs/linux.js +92 -0
- package/lib/cjs/win32.js +1 -0
- package/lib/esm/constants.js +122 -0
- package/lib/esm/createSubnet.js +17 -0
- package/lib/esm/darwin.js +115 -0
- package/lib/esm/index.js +92 -0
- package/lib/esm/linux.js +92 -0
- package/lib/esm/win32.js +1 -0
- package/package.json +33 -17
- package/src/{constants.js → constants.ts} +1 -1
- package/src/{createSubnet.js → createSubnet.ts} +3 -1
- package/src/{darwin.js → darwin.ts} +65 -59
- package/src/index.spec.ts +9 -0
- package/src/index.ts +103 -0
- package/src/{linux.js → linux.ts} +54 -48
- package/src/test.mts +4 -0
- package/test.gjs.mjs +34720 -0
- package/test.gjs.mjs.meta.json +1 -0
- package/test.node.mjs +307 -0
- package/tsconfig.json +18 -0
- package/tsconfig.types.json +8 -0
- package/index.js +0 -46
- package/src/system.js +0 -3
- /package/src/{win32.js → win32.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# @gjsify/os
|
|
1
|
+
# @gjsify/os
|
|
2
2
|
|
|
3
|
-
os
|
|
4
|
-
|
|
5
|
-
<sup><sub>( currently available for Linux / macOS only )</sub></sup>
|
|
3
|
+
Node.js os module for Gjs
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
var constants_default = {
|
|
2
|
+
"UV_UDP_REUSEADDR": 4,
|
|
3
|
+
"errno": {
|
|
4
|
+
"E2BIG": 7,
|
|
5
|
+
"EACCES": 13,
|
|
6
|
+
"EADDRINUSE": 98,
|
|
7
|
+
"EADDRNOTAVAIL": 99,
|
|
8
|
+
"EAFNOSUPPORT": 97,
|
|
9
|
+
"EAGAIN": 11,
|
|
10
|
+
"EALREADY": 114,
|
|
11
|
+
"EBADF": 9,
|
|
12
|
+
"EBADMSG": 74,
|
|
13
|
+
"EBUSY": 16,
|
|
14
|
+
"ECANCELED": 125,
|
|
15
|
+
"ECHILD": 10,
|
|
16
|
+
"ECONNABORTED": 103,
|
|
17
|
+
"ECONNREFUSED": 111,
|
|
18
|
+
"ECONNRESET": 104,
|
|
19
|
+
"EDEADLK": 35,
|
|
20
|
+
"EDESTADDRREQ": 89,
|
|
21
|
+
"EDOM": 33,
|
|
22
|
+
"EDQUOT": 122,
|
|
23
|
+
"EEXIST": 17,
|
|
24
|
+
"EFAULT": 14,
|
|
25
|
+
"EFBIG": 27,
|
|
26
|
+
"EHOSTUNREACH": 113,
|
|
27
|
+
"EIDRM": 43,
|
|
28
|
+
"EILSEQ": 84,
|
|
29
|
+
"EINPROGRESS": 115,
|
|
30
|
+
"EINTR": 4,
|
|
31
|
+
"EINVAL": 22,
|
|
32
|
+
"EIO": 5,
|
|
33
|
+
"EISCONN": 106,
|
|
34
|
+
"EISDIR": 21,
|
|
35
|
+
"ELOOP": 40,
|
|
36
|
+
"EMFILE": 24,
|
|
37
|
+
"EMLINK": 31,
|
|
38
|
+
"EMSGSIZE": 90,
|
|
39
|
+
"EMULTIHOP": 72,
|
|
40
|
+
"ENAMETOOLONG": 36,
|
|
41
|
+
"ENETDOWN": 100,
|
|
42
|
+
"ENETRESET": 102,
|
|
43
|
+
"ENETUNREACH": 101,
|
|
44
|
+
"ENFILE": 23,
|
|
45
|
+
"ENOBUFS": 105,
|
|
46
|
+
"ENODATA": 61,
|
|
47
|
+
"ENODEV": 19,
|
|
48
|
+
"ENOENT": 2,
|
|
49
|
+
"ENOEXEC": 8,
|
|
50
|
+
"ENOLCK": 37,
|
|
51
|
+
"ENOLINK": 67,
|
|
52
|
+
"ENOMEM": 12,
|
|
53
|
+
"ENOMSG": 42,
|
|
54
|
+
"ENOPROTOOPT": 92,
|
|
55
|
+
"ENOSPC": 28,
|
|
56
|
+
"ENOSR": 63,
|
|
57
|
+
"ENOSTR": 60,
|
|
58
|
+
"ENOSYS": 38,
|
|
59
|
+
"ENOTCONN": 107,
|
|
60
|
+
"ENOTDIR": 20,
|
|
61
|
+
"ENOTEMPTY": 39,
|
|
62
|
+
"ENOTSOCK": 88,
|
|
63
|
+
"ENOTSUP": 95,
|
|
64
|
+
"ENOTTY": 25,
|
|
65
|
+
"ENXIO": 6,
|
|
66
|
+
"EOPNOTSUPP": 95,
|
|
67
|
+
"EOVERFLOW": 75,
|
|
68
|
+
"EPERM": 1,
|
|
69
|
+
"EPIPE": 32,
|
|
70
|
+
"EPROTO": 71,
|
|
71
|
+
"EPROTONOSUPPORT": 93,
|
|
72
|
+
"EPROTOTYPE": 91,
|
|
73
|
+
"ERANGE": 34,
|
|
74
|
+
"EROFS": 30,
|
|
75
|
+
"ESPIPE": 29,
|
|
76
|
+
"ESRCH": 3,
|
|
77
|
+
"ESTALE": 116,
|
|
78
|
+
"ETIME": 62,
|
|
79
|
+
"ETIMEDOUT": 110,
|
|
80
|
+
"ETXTBSY": 26,
|
|
81
|
+
"EWOULDBLOCK": 11,
|
|
82
|
+
"EXDEV": 18
|
|
83
|
+
},
|
|
84
|
+
"signals": {
|
|
85
|
+
"SIGHUP": 1,
|
|
86
|
+
"SIGINT": 2,
|
|
87
|
+
"SIGQUIT": 3,
|
|
88
|
+
"SIGILL": 4,
|
|
89
|
+
"SIGTRAP": 5,
|
|
90
|
+
"SIGABRT": 6,
|
|
91
|
+
"SIGIOT": 6,
|
|
92
|
+
"SIGBUS": 7,
|
|
93
|
+
"SIGFPE": 8,
|
|
94
|
+
"SIGKILL": 9,
|
|
95
|
+
"SIGUSR1": 10,
|
|
96
|
+
"SIGSEGV": 11,
|
|
97
|
+
"SIGUSR2": 12,
|
|
98
|
+
"SIGPIPE": 13,
|
|
99
|
+
"SIGALRM": 14,
|
|
100
|
+
"SIGTERM": 15,
|
|
101
|
+
"SIGCHLD": 17,
|
|
102
|
+
"SIGSTKFLT": 16,
|
|
103
|
+
"SIGCONT": 18,
|
|
104
|
+
"SIGSTOP": 19,
|
|
105
|
+
"SIGTSTP": 20,
|
|
106
|
+
"SIGTTIN": 21,
|
|
107
|
+
"SIGTTOU": 22,
|
|
108
|
+
"SIGURG": 23,
|
|
109
|
+
"SIGXCPU": 24,
|
|
110
|
+
"SIGXFSZ": 25,
|
|
111
|
+
"SIGVTALRM": 26,
|
|
112
|
+
"SIGPROF": 27,
|
|
113
|
+
"SIGWINCH": 28,
|
|
114
|
+
"SIGIO": 29,
|
|
115
|
+
"SIGPOLL": 29,
|
|
116
|
+
"SIGPWR": 30,
|
|
117
|
+
"SIGSYS": 31
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
export {
|
|
121
|
+
constants_default as default
|
|
122
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
function createSubnet(size, segment, base, sep) {
|
|
2
|
+
const empty = "0".repeat(size);
|
|
3
|
+
return (mask) => {
|
|
4
|
+
const str = ("1".repeat(parseInt(mask, 10)) + empty).slice(0, size);
|
|
5
|
+
const out = [];
|
|
6
|
+
for (let i = 0; i < size; i += segment) {
|
|
7
|
+
out.push(parseInt(str.substr(i, segment), 2).toString(base));
|
|
8
|
+
}
|
|
9
|
+
return out.join(sep);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
;
|
|
13
|
+
var createSubnet_default = { createSubnet };
|
|
14
|
+
export {
|
|
15
|
+
createSubnet,
|
|
16
|
+
createSubnet_default as default
|
|
17
|
+
};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { createSubnet } from "./createSubnet.js";
|
|
2
|
+
import { cli } from "@gjsify/utils";
|
|
3
|
+
const EOL = /\r\n|\n/;
|
|
4
|
+
const NOMAC = "00:00:00:00:00:00";
|
|
5
|
+
const getIPv6Subnet = createSubnet(128, 16, 16, ":");
|
|
6
|
+
const parseInterfaces = function(info) {
|
|
7
|
+
info = info.trim();
|
|
8
|
+
if (info.length < 1 || !/\binet\b/.test(info))
|
|
9
|
+
return;
|
|
10
|
+
const lines = info.split("\n");
|
|
11
|
+
const iface = [];
|
|
12
|
+
const length = lines.length;
|
|
13
|
+
let mac = NOMAC;
|
|
14
|
+
for (let line, i = 0; i < length; i++) {
|
|
15
|
+
line = lines[i];
|
|
16
|
+
switch (true) {
|
|
17
|
+
case /ether\s+((?:\S{2}:)+\S{2})/.test(line):
|
|
18
|
+
mac = RegExp.$1;
|
|
19
|
+
break;
|
|
20
|
+
case /inet\s+(\d+\.\d+\.\d+\.\d+)\s+netmask\s+0x(.{2})(.{2})(.{2})(.{2})/.test(line):
|
|
21
|
+
iface.push({
|
|
22
|
+
address: RegExp.$1,
|
|
23
|
+
netmask: [
|
|
24
|
+
parseInt(RegExp.$2, 16),
|
|
25
|
+
parseInt(RegExp.$3, 16),
|
|
26
|
+
parseInt(RegExp.$4, 16),
|
|
27
|
+
parseInt(RegExp.$5, 16)
|
|
28
|
+
].join("."),
|
|
29
|
+
family: "IPv4",
|
|
30
|
+
mac,
|
|
31
|
+
internal: RegExp.$1 === "127.0.0.1"
|
|
32
|
+
});
|
|
33
|
+
break;
|
|
34
|
+
case /inet6\s+((?:\S{0,4}:)+\S{1,4}).+?prefixlen\s+(\d+)/.test(line):
|
|
35
|
+
iface.push({
|
|
36
|
+
address: RegExp.$1,
|
|
37
|
+
netmask: getIPv6Subnet(RegExp.$2),
|
|
38
|
+
family: "IPv6",
|
|
39
|
+
mac,
|
|
40
|
+
internal: mac !== NOMAC
|
|
41
|
+
});
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
this[info.slice(0, info.indexOf(":"))] = iface;
|
|
46
|
+
};
|
|
47
|
+
const cpus = () => {
|
|
48
|
+
let cores = parseFloat(cli("sysctl -n hw.ncpu"));
|
|
49
|
+
const cpus2 = [];
|
|
50
|
+
while (cores--) {
|
|
51
|
+
cpus2.push({
|
|
52
|
+
model: cli("sysctl -n machdep.cpu.brand_string").replace(/\s+/g, " "),
|
|
53
|
+
speed: parseFloat(cli("sysctl -n hw.cpufrequency")) / 1e3 / 1e3,
|
|
54
|
+
get times() {
|
|
55
|
+
console.warn("cpus.times is not supported");
|
|
56
|
+
return {};
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return cpus2;
|
|
61
|
+
};
|
|
62
|
+
const endianness = () => "LE";
|
|
63
|
+
const freemem = () => parseFloat(cli("sysctl -n hw.memsize")) - parseFloat(cli("sysctl -n hw.physmem"));
|
|
64
|
+
const loadavg = () => /load\s+averages:\s+(\d+(?:\.\d+))\s+(\d+(?:\.\d+))\s+(\d+(?:\.\d+))/.test(
|
|
65
|
+
cli("uptime")
|
|
66
|
+
) && [
|
|
67
|
+
parseFloat(RegExp.$1),
|
|
68
|
+
parseFloat(RegExp.$2),
|
|
69
|
+
parseFloat(RegExp.$3)
|
|
70
|
+
];
|
|
71
|
+
const networkInterfaces = () => {
|
|
72
|
+
const ifaces = {};
|
|
73
|
+
const groups = [];
|
|
74
|
+
const lines = cli("ifconfig").split(EOL);
|
|
75
|
+
const length = lines.length;
|
|
76
|
+
for (let group = [], re = /^\S+?:/, i = 0; i < length; i++) {
|
|
77
|
+
if (re.test(lines[i])) {
|
|
78
|
+
group = [lines[i]];
|
|
79
|
+
while (++i < length && !re.test(lines[i])) {
|
|
80
|
+
group.push(lines[i]);
|
|
81
|
+
}
|
|
82
|
+
--i;
|
|
83
|
+
}
|
|
84
|
+
groups.push(group.join(EOL));
|
|
85
|
+
}
|
|
86
|
+
groups.forEach(parseInterfaces, ifaces);
|
|
87
|
+
return ifaces;
|
|
88
|
+
};
|
|
89
|
+
const totalmem = () => {
|
|
90
|
+
let I, mem = cli("free -b").split(EOL);
|
|
91
|
+
mem[0].split(/\s+/).some((info, i) => info === "total" && (I = i));
|
|
92
|
+
return parseFloat(mem[1].split(/\s+/)[I + 1]);
|
|
93
|
+
};
|
|
94
|
+
const uptime = () => {
|
|
95
|
+
const uptime2 = cli("uptime");
|
|
96
|
+
const up = /up\s+([^,]+)?,/.test(uptime2) && RegExp.$1;
|
|
97
|
+
switch (true) {
|
|
98
|
+
case /^(\d+):(\d+)$/.test(up):
|
|
99
|
+
return (parseInt(RegExp.$1, 10) * 60 + parseInt(RegExp.$2, 10)) * 60;
|
|
100
|
+
case /^(\d+)\s+mins?$/.test(up):
|
|
101
|
+
return parseInt(RegExp.$1, 10) * 60;
|
|
102
|
+
case /^(\d+)\s+days?$/.test(up):
|
|
103
|
+
return parseInt(RegExp.$1, 10) * 86400 + (/days?,\s+^(\d+):(\d+)$/.test(uptime2) && (parseInt(RegExp.$1, 10) * 60 + parseInt(RegExp.$2, 10)) * 60);
|
|
104
|
+
}
|
|
105
|
+
return up;
|
|
106
|
+
};
|
|
107
|
+
export {
|
|
108
|
+
cpus,
|
|
109
|
+
endianness,
|
|
110
|
+
freemem,
|
|
111
|
+
loadavg,
|
|
112
|
+
networkInterfaces,
|
|
113
|
+
totalmem,
|
|
114
|
+
uptime
|
|
115
|
+
};
|
package/lib/cjs/index.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { cli, getPathSeparator, getOs } from "@gjsify/utils";
|
|
2
|
+
import * as linux from "./linux.js";
|
|
3
|
+
import * as darwin from "./darwin.js";
|
|
4
|
+
import GLib from "@girs/glib-2.0";
|
|
5
|
+
import constants from "./constants.js";
|
|
6
|
+
const EOL = getPathSeparator() === "/" ? "\n" : "\r\n";
|
|
7
|
+
const homedir = () => GLib.get_home_dir();
|
|
8
|
+
const hostname = () => GLib.get_host_name();
|
|
9
|
+
const release = () => cli("uname -r");
|
|
10
|
+
const tmpdir = () => GLib.get_tmp_dir();
|
|
11
|
+
const type = () => cli("uname");
|
|
12
|
+
const userInfo = () => ({
|
|
13
|
+
uid: 1e3,
|
|
14
|
+
gid: 100,
|
|
15
|
+
username: GLib.get_user_name(),
|
|
16
|
+
homedir: GLib.get_home_dir()
|
|
17
|
+
});
|
|
18
|
+
const cpus = () => {
|
|
19
|
+
const _os = getOs();
|
|
20
|
+
switch (_os) {
|
|
21
|
+
case "darwin":
|
|
22
|
+
return darwin.cpus();
|
|
23
|
+
case "linux":
|
|
24
|
+
return linux.cpus();
|
|
25
|
+
default:
|
|
26
|
+
console.warn(`${_os} is not supported!`);
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const endianness = () => {
|
|
31
|
+
const _os = getOs();
|
|
32
|
+
switch (_os) {
|
|
33
|
+
case "darwin":
|
|
34
|
+
return darwin.endianness();
|
|
35
|
+
case "linux":
|
|
36
|
+
return linux.endianness();
|
|
37
|
+
default:
|
|
38
|
+
console.warn(`${_os} is not supported!`);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const freemem = () => {
|
|
43
|
+
const _os = getOs();
|
|
44
|
+
switch (_os) {
|
|
45
|
+
case "darwin":
|
|
46
|
+
return darwin.freemem();
|
|
47
|
+
case "linux":
|
|
48
|
+
return linux.freemem();
|
|
49
|
+
default:
|
|
50
|
+
console.warn(`${_os} is not supported!`);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const loadavg = () => {
|
|
55
|
+
const _os = getOs();
|
|
56
|
+
switch (_os) {
|
|
57
|
+
case "darwin":
|
|
58
|
+
return darwin.loadavg();
|
|
59
|
+
case "linux":
|
|
60
|
+
return linux.loadavg();
|
|
61
|
+
default:
|
|
62
|
+
console.warn(`${_os} is not supported!`);
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const networkInterfaces = () => {
|
|
67
|
+
const _os = getOs();
|
|
68
|
+
switch (_os) {
|
|
69
|
+
case "darwin":
|
|
70
|
+
return darwin.networkInterfaces();
|
|
71
|
+
case "linux":
|
|
72
|
+
return linux.networkInterfaces();
|
|
73
|
+
default:
|
|
74
|
+
console.warn(`${_os} is not supported!`);
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
export {
|
|
79
|
+
EOL,
|
|
80
|
+
constants,
|
|
81
|
+
cpus,
|
|
82
|
+
endianness,
|
|
83
|
+
freemem,
|
|
84
|
+
homedir,
|
|
85
|
+
hostname,
|
|
86
|
+
loadavg,
|
|
87
|
+
networkInterfaces,
|
|
88
|
+
release,
|
|
89
|
+
tmpdir,
|
|
90
|
+
type,
|
|
91
|
+
userInfo
|
|
92
|
+
};
|
package/lib/cjs/linux.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { createSubnet } from "./createSubnet.js";
|
|
2
|
+
import { cli } from "@gjsify/utils";
|
|
3
|
+
const EOL = /\r\n|\n/;
|
|
4
|
+
const getIPv4Subnet = createSubnet(32, 8, 10, ".");
|
|
5
|
+
const getIPv6Subnet = createSubnet(128, 16, 16, ":");
|
|
6
|
+
function parseInterfaces(info) {
|
|
7
|
+
info = info.trim();
|
|
8
|
+
if (info.length < 1)
|
|
9
|
+
return;
|
|
10
|
+
let iface = [], mac;
|
|
11
|
+
for (let line, lines = info.split(EOL), i = 0; i < lines.length; i++) {
|
|
12
|
+
line = lines[i];
|
|
13
|
+
switch (true) {
|
|
14
|
+
case /link\/\S+\s+((?:\S{2}:)+\S{2})/.test(line):
|
|
15
|
+
mac = RegExp.$1;
|
|
16
|
+
break;
|
|
17
|
+
case /inet(\d*)\s+(\S+)/.test(line):
|
|
18
|
+
let ip = RegExp.$2.split("/"), v = RegExp.$1 || "4";
|
|
19
|
+
iface.push({
|
|
20
|
+
address: ip[0],
|
|
21
|
+
netmask: (v === "4" ? getIPv4Subnet : getIPv6Subnet)(ip[1]),
|
|
22
|
+
family: "IPv" + v,
|
|
23
|
+
mac,
|
|
24
|
+
internal: ip[0] === "127.0.0.1"
|
|
25
|
+
});
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (mac)
|
|
30
|
+
this[info.slice(0, info.indexOf(":"))] = iface;
|
|
31
|
+
}
|
|
32
|
+
;
|
|
33
|
+
const cpus = () => {
|
|
34
|
+
const PROCESSOR = /^processor\s*:\s*(\d+)/i;
|
|
35
|
+
const NAME = /^model[\s_]+name\s*:([^\r\n]+)/i;
|
|
36
|
+
const FREQ = /^cpu[\s_]+MHz\s*:\s*(\d+)/i;
|
|
37
|
+
const cpus2 = [];
|
|
38
|
+
let cpu;
|
|
39
|
+
cli("cat /proc/cpuinfo").split(EOL).forEach((line) => {
|
|
40
|
+
switch (true) {
|
|
41
|
+
case PROCESSOR.test(line):
|
|
42
|
+
cpus2[RegExp.$1.trim()] = cpu = {
|
|
43
|
+
model: "",
|
|
44
|
+
speed: 0,
|
|
45
|
+
get times() {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
break;
|
|
50
|
+
case NAME.test(line):
|
|
51
|
+
cpu.model = RegExp.$1.trim();
|
|
52
|
+
break;
|
|
53
|
+
case FREQ.test(line):
|
|
54
|
+
cpu.speed = parseFloat(RegExp.$1.trim());
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return cpus2;
|
|
59
|
+
};
|
|
60
|
+
const endianness = () => "LE";
|
|
61
|
+
const freemem = () => {
|
|
62
|
+
let I, mem = cli("free -b").split(EOL);
|
|
63
|
+
mem[0].split(/\s+/).some((info, i) => info === "free" && (I = i));
|
|
64
|
+
return parseFloat(mem[1].split(/\s+/)[I + 1]);
|
|
65
|
+
};
|
|
66
|
+
const loadavg = () => /(\d+(?:\.\d+))\s+(\d+(?:\.\d+))\s+(\d+(?:\.\d+))/.test(
|
|
67
|
+
cli("cat /proc/loadavg")
|
|
68
|
+
) && [
|
|
69
|
+
parseFloat(RegExp.$1),
|
|
70
|
+
parseFloat(RegExp.$2),
|
|
71
|
+
parseFloat(RegExp.$3)
|
|
72
|
+
];
|
|
73
|
+
const networkInterfaces = () => {
|
|
74
|
+
const ifaces = {};
|
|
75
|
+
cli("ip addr").split(/^\d+:\s+/m).forEach(parseInterfaces, ifaces);
|
|
76
|
+
return ifaces;
|
|
77
|
+
};
|
|
78
|
+
const totalmem = () => {
|
|
79
|
+
let I, mem = cli("free -b").split(EOL);
|
|
80
|
+
mem[0].split(/\s+/).some((info, i) => info === "total" && (I = i));
|
|
81
|
+
return parseFloat(mem[1].split(/\s+/)[I + 1]);
|
|
82
|
+
};
|
|
83
|
+
const uptime = () => (Date.now() - Date.parse(cli("uptime -s").replace(" ", "T"))) / 1e3;
|
|
84
|
+
export {
|
|
85
|
+
cpus,
|
|
86
|
+
endianness,
|
|
87
|
+
freemem,
|
|
88
|
+
loadavg,
|
|
89
|
+
networkInterfaces,
|
|
90
|
+
totalmem,
|
|
91
|
+
uptime
|
|
92
|
+
};
|
package/lib/cjs/win32.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
console.warn("os core module is not fully supported here");
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
var constants_default = {
|
|
2
|
+
"UV_UDP_REUSEADDR": 4,
|
|
3
|
+
"errno": {
|
|
4
|
+
"E2BIG": 7,
|
|
5
|
+
"EACCES": 13,
|
|
6
|
+
"EADDRINUSE": 98,
|
|
7
|
+
"EADDRNOTAVAIL": 99,
|
|
8
|
+
"EAFNOSUPPORT": 97,
|
|
9
|
+
"EAGAIN": 11,
|
|
10
|
+
"EALREADY": 114,
|
|
11
|
+
"EBADF": 9,
|
|
12
|
+
"EBADMSG": 74,
|
|
13
|
+
"EBUSY": 16,
|
|
14
|
+
"ECANCELED": 125,
|
|
15
|
+
"ECHILD": 10,
|
|
16
|
+
"ECONNABORTED": 103,
|
|
17
|
+
"ECONNREFUSED": 111,
|
|
18
|
+
"ECONNRESET": 104,
|
|
19
|
+
"EDEADLK": 35,
|
|
20
|
+
"EDESTADDRREQ": 89,
|
|
21
|
+
"EDOM": 33,
|
|
22
|
+
"EDQUOT": 122,
|
|
23
|
+
"EEXIST": 17,
|
|
24
|
+
"EFAULT": 14,
|
|
25
|
+
"EFBIG": 27,
|
|
26
|
+
"EHOSTUNREACH": 113,
|
|
27
|
+
"EIDRM": 43,
|
|
28
|
+
"EILSEQ": 84,
|
|
29
|
+
"EINPROGRESS": 115,
|
|
30
|
+
"EINTR": 4,
|
|
31
|
+
"EINVAL": 22,
|
|
32
|
+
"EIO": 5,
|
|
33
|
+
"EISCONN": 106,
|
|
34
|
+
"EISDIR": 21,
|
|
35
|
+
"ELOOP": 40,
|
|
36
|
+
"EMFILE": 24,
|
|
37
|
+
"EMLINK": 31,
|
|
38
|
+
"EMSGSIZE": 90,
|
|
39
|
+
"EMULTIHOP": 72,
|
|
40
|
+
"ENAMETOOLONG": 36,
|
|
41
|
+
"ENETDOWN": 100,
|
|
42
|
+
"ENETRESET": 102,
|
|
43
|
+
"ENETUNREACH": 101,
|
|
44
|
+
"ENFILE": 23,
|
|
45
|
+
"ENOBUFS": 105,
|
|
46
|
+
"ENODATA": 61,
|
|
47
|
+
"ENODEV": 19,
|
|
48
|
+
"ENOENT": 2,
|
|
49
|
+
"ENOEXEC": 8,
|
|
50
|
+
"ENOLCK": 37,
|
|
51
|
+
"ENOLINK": 67,
|
|
52
|
+
"ENOMEM": 12,
|
|
53
|
+
"ENOMSG": 42,
|
|
54
|
+
"ENOPROTOOPT": 92,
|
|
55
|
+
"ENOSPC": 28,
|
|
56
|
+
"ENOSR": 63,
|
|
57
|
+
"ENOSTR": 60,
|
|
58
|
+
"ENOSYS": 38,
|
|
59
|
+
"ENOTCONN": 107,
|
|
60
|
+
"ENOTDIR": 20,
|
|
61
|
+
"ENOTEMPTY": 39,
|
|
62
|
+
"ENOTSOCK": 88,
|
|
63
|
+
"ENOTSUP": 95,
|
|
64
|
+
"ENOTTY": 25,
|
|
65
|
+
"ENXIO": 6,
|
|
66
|
+
"EOPNOTSUPP": 95,
|
|
67
|
+
"EOVERFLOW": 75,
|
|
68
|
+
"EPERM": 1,
|
|
69
|
+
"EPIPE": 32,
|
|
70
|
+
"EPROTO": 71,
|
|
71
|
+
"EPROTONOSUPPORT": 93,
|
|
72
|
+
"EPROTOTYPE": 91,
|
|
73
|
+
"ERANGE": 34,
|
|
74
|
+
"EROFS": 30,
|
|
75
|
+
"ESPIPE": 29,
|
|
76
|
+
"ESRCH": 3,
|
|
77
|
+
"ESTALE": 116,
|
|
78
|
+
"ETIME": 62,
|
|
79
|
+
"ETIMEDOUT": 110,
|
|
80
|
+
"ETXTBSY": 26,
|
|
81
|
+
"EWOULDBLOCK": 11,
|
|
82
|
+
"EXDEV": 18
|
|
83
|
+
},
|
|
84
|
+
"signals": {
|
|
85
|
+
"SIGHUP": 1,
|
|
86
|
+
"SIGINT": 2,
|
|
87
|
+
"SIGQUIT": 3,
|
|
88
|
+
"SIGILL": 4,
|
|
89
|
+
"SIGTRAP": 5,
|
|
90
|
+
"SIGABRT": 6,
|
|
91
|
+
"SIGIOT": 6,
|
|
92
|
+
"SIGBUS": 7,
|
|
93
|
+
"SIGFPE": 8,
|
|
94
|
+
"SIGKILL": 9,
|
|
95
|
+
"SIGUSR1": 10,
|
|
96
|
+
"SIGSEGV": 11,
|
|
97
|
+
"SIGUSR2": 12,
|
|
98
|
+
"SIGPIPE": 13,
|
|
99
|
+
"SIGALRM": 14,
|
|
100
|
+
"SIGTERM": 15,
|
|
101
|
+
"SIGCHLD": 17,
|
|
102
|
+
"SIGSTKFLT": 16,
|
|
103
|
+
"SIGCONT": 18,
|
|
104
|
+
"SIGSTOP": 19,
|
|
105
|
+
"SIGTSTP": 20,
|
|
106
|
+
"SIGTTIN": 21,
|
|
107
|
+
"SIGTTOU": 22,
|
|
108
|
+
"SIGURG": 23,
|
|
109
|
+
"SIGXCPU": 24,
|
|
110
|
+
"SIGXFSZ": 25,
|
|
111
|
+
"SIGVTALRM": 26,
|
|
112
|
+
"SIGPROF": 27,
|
|
113
|
+
"SIGWINCH": 28,
|
|
114
|
+
"SIGIO": 29,
|
|
115
|
+
"SIGPOLL": 29,
|
|
116
|
+
"SIGPWR": 30,
|
|
117
|
+
"SIGSYS": 31
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
export {
|
|
121
|
+
constants_default as default
|
|
122
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
function createSubnet(size, segment, base, sep) {
|
|
2
|
+
const empty = "0".repeat(size);
|
|
3
|
+
return (mask) => {
|
|
4
|
+
const str = ("1".repeat(parseInt(mask, 10)) + empty).slice(0, size);
|
|
5
|
+
const out = [];
|
|
6
|
+
for (let i = 0; i < size; i += segment) {
|
|
7
|
+
out.push(parseInt(str.substr(i, segment), 2).toString(base));
|
|
8
|
+
}
|
|
9
|
+
return out.join(sep);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
;
|
|
13
|
+
var createSubnet_default = { createSubnet };
|
|
14
|
+
export {
|
|
15
|
+
createSubnet,
|
|
16
|
+
createSubnet_default as default
|
|
17
|
+
};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { createSubnet } from "./createSubnet.js";
|
|
2
|
+
import { cli } from "@gjsify/utils";
|
|
3
|
+
const EOL = /\r\n|\n/;
|
|
4
|
+
const NOMAC = "00:00:00:00:00:00";
|
|
5
|
+
const getIPv6Subnet = createSubnet(128, 16, 16, ":");
|
|
6
|
+
const parseInterfaces = function(info) {
|
|
7
|
+
info = info.trim();
|
|
8
|
+
if (info.length < 1 || !/\binet\b/.test(info))
|
|
9
|
+
return;
|
|
10
|
+
const lines = info.split("\n");
|
|
11
|
+
const iface = [];
|
|
12
|
+
const length = lines.length;
|
|
13
|
+
let mac = NOMAC;
|
|
14
|
+
for (let line, i = 0; i < length; i++) {
|
|
15
|
+
line = lines[i];
|
|
16
|
+
switch (true) {
|
|
17
|
+
case /ether\s+((?:\S{2}:)+\S{2})/.test(line):
|
|
18
|
+
mac = RegExp.$1;
|
|
19
|
+
break;
|
|
20
|
+
case /inet\s+(\d+\.\d+\.\d+\.\d+)\s+netmask\s+0x(.{2})(.{2})(.{2})(.{2})/.test(line):
|
|
21
|
+
iface.push({
|
|
22
|
+
address: RegExp.$1,
|
|
23
|
+
netmask: [
|
|
24
|
+
parseInt(RegExp.$2, 16),
|
|
25
|
+
parseInt(RegExp.$3, 16),
|
|
26
|
+
parseInt(RegExp.$4, 16),
|
|
27
|
+
parseInt(RegExp.$5, 16)
|
|
28
|
+
].join("."),
|
|
29
|
+
family: "IPv4",
|
|
30
|
+
mac,
|
|
31
|
+
internal: RegExp.$1 === "127.0.0.1"
|
|
32
|
+
});
|
|
33
|
+
break;
|
|
34
|
+
case /inet6\s+((?:\S{0,4}:)+\S{1,4}).+?prefixlen\s+(\d+)/.test(line):
|
|
35
|
+
iface.push({
|
|
36
|
+
address: RegExp.$1,
|
|
37
|
+
netmask: getIPv6Subnet(RegExp.$2),
|
|
38
|
+
family: "IPv6",
|
|
39
|
+
mac,
|
|
40
|
+
internal: mac !== NOMAC
|
|
41
|
+
});
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
this[info.slice(0, info.indexOf(":"))] = iface;
|
|
46
|
+
};
|
|
47
|
+
const cpus = () => {
|
|
48
|
+
let cores = parseFloat(cli("sysctl -n hw.ncpu"));
|
|
49
|
+
const cpus2 = [];
|
|
50
|
+
while (cores--) {
|
|
51
|
+
cpus2.push({
|
|
52
|
+
model: cli("sysctl -n machdep.cpu.brand_string").replace(/\s+/g, " "),
|
|
53
|
+
speed: parseFloat(cli("sysctl -n hw.cpufrequency")) / 1e3 / 1e3,
|
|
54
|
+
get times() {
|
|
55
|
+
console.warn("cpus.times is not supported");
|
|
56
|
+
return {};
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return cpus2;
|
|
61
|
+
};
|
|
62
|
+
const endianness = () => "LE";
|
|
63
|
+
const freemem = () => parseFloat(cli("sysctl -n hw.memsize")) - parseFloat(cli("sysctl -n hw.physmem"));
|
|
64
|
+
const loadavg = () => /load\s+averages:\s+(\d+(?:\.\d+))\s+(\d+(?:\.\d+))\s+(\d+(?:\.\d+))/.test(
|
|
65
|
+
cli("uptime")
|
|
66
|
+
) && [
|
|
67
|
+
parseFloat(RegExp.$1),
|
|
68
|
+
parseFloat(RegExp.$2),
|
|
69
|
+
parseFloat(RegExp.$3)
|
|
70
|
+
];
|
|
71
|
+
const networkInterfaces = () => {
|
|
72
|
+
const ifaces = {};
|
|
73
|
+
const groups = [];
|
|
74
|
+
const lines = cli("ifconfig").split(EOL);
|
|
75
|
+
const length = lines.length;
|
|
76
|
+
for (let group = [], re = /^\S+?:/, i = 0; i < length; i++) {
|
|
77
|
+
if (re.test(lines[i])) {
|
|
78
|
+
group = [lines[i]];
|
|
79
|
+
while (++i < length && !re.test(lines[i])) {
|
|
80
|
+
group.push(lines[i]);
|
|
81
|
+
}
|
|
82
|
+
--i;
|
|
83
|
+
}
|
|
84
|
+
groups.push(group.join(EOL));
|
|
85
|
+
}
|
|
86
|
+
groups.forEach(parseInterfaces, ifaces);
|
|
87
|
+
return ifaces;
|
|
88
|
+
};
|
|
89
|
+
const totalmem = () => {
|
|
90
|
+
let I, mem = cli("free -b").split(EOL);
|
|
91
|
+
mem[0].split(/\s+/).some((info, i) => info === "total" && (I = i));
|
|
92
|
+
return parseFloat(mem[1].split(/\s+/)[I + 1]);
|
|
93
|
+
};
|
|
94
|
+
const uptime = () => {
|
|
95
|
+
const uptime2 = cli("uptime");
|
|
96
|
+
const up = /up\s+([^,]+)?,/.test(uptime2) && RegExp.$1;
|
|
97
|
+
switch (true) {
|
|
98
|
+
case /^(\d+):(\d+)$/.test(up):
|
|
99
|
+
return (parseInt(RegExp.$1, 10) * 60 + parseInt(RegExp.$2, 10)) * 60;
|
|
100
|
+
case /^(\d+)\s+mins?$/.test(up):
|
|
101
|
+
return parseInt(RegExp.$1, 10) * 60;
|
|
102
|
+
case /^(\d+)\s+days?$/.test(up):
|
|
103
|
+
return parseInt(RegExp.$1, 10) * 86400 + (/days?,\s+^(\d+):(\d+)$/.test(uptime2) && (parseInt(RegExp.$1, 10) * 60 + parseInt(RegExp.$2, 10)) * 60);
|
|
104
|
+
}
|
|
105
|
+
return up;
|
|
106
|
+
};
|
|
107
|
+
export {
|
|
108
|
+
cpus,
|
|
109
|
+
endianness,
|
|
110
|
+
freemem,
|
|
111
|
+
loadavg,
|
|
112
|
+
networkInterfaces,
|
|
113
|
+
totalmem,
|
|
114
|
+
uptime
|
|
115
|
+
};
|