Skip to content
21 changes: 21 additions & 0 deletions src/bun.js/node/node_os.zig
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ pub const Os = struct {
module.put(globalObject, JSC.ZigString.static("uptime"), JSC.NewFunction(globalObject, JSC.ZigString.static("uptime"), 0, uptime, true));
module.put(globalObject, JSC.ZigString.static("userInfo"), JSC.NewFunction(globalObject, JSC.ZigString.static("userInfo"), 0, userInfo, true));
module.put(globalObject, JSC.ZigString.static("version"), JSC.NewFunction(globalObject, JSC.ZigString.static("version"), 0, version, true));
module.put(globalObject, JSC.ZigString.static("machine"), JSC.NewFunction(globalObject, JSC.ZigString.static("machine"), 0, machine, true));

module.put(globalObject, JSC.ZigString.static("devNull"), JSC.ZigString.init(devNull).withEncoding().toValue(globalObject));
module.put(globalObject, JSC.ZigString.static("EOL"), JSC.ZigString.init(EOL).withEncoding().toValue(globalObject));
Expand Down Expand Up @@ -314,4 +315,24 @@ pub const Os = struct {
var name_buffer: [std.os.HOST_NAME_MAX]u8 = undefined;
return JSC.ZigString.init(C.getVersion(&name_buffer)).withEncoding().toValueGC(globalThis);
}

inline fn getMachineName() []const u8 {
return switch (@import("builtin").target.cpu.arch) {
.arm => "arm",
.aarch64 => "aarch64",
.mips => "mips",
.mips64 => "mips64",
.powerpc64 => "ppc64",
.powerpc64le => "ppc64le",
.s390x => "s390x",
.i386 => "i386",
.x86_64 => "x86_64",
else => "unknown",
};
}

pub fn machine(globalThis: *JSC.JSGlobalObject, _: *JSC.CallFrame) callconv(.C) JSC.JSValue {
JSC.markBinding(@src());
return JSC.ZigString.static(comptime getMachineName()).toValue(globalThis);
}
};
2 changes: 2 additions & 0 deletions src/bun.js/os.exports.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ function bound(obj) {
uptime: obj.uptime.bind(obj),
userInfo: obj.userInfo.bind(obj),
version: obj.version.bind(obj),
machine: obj.machine.bind(obj),
devNull: obj.devNull,
EOL: obj.EOL,
constants: obj.constants,
Expand Down Expand Up @@ -45,6 +46,7 @@ export var {
uptime,
userInfo,
version,
machine,
devNull,
EOL,
constants,
Expand Down
17 changes: 17 additions & 0 deletions test/bun.js/os.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,23 @@ it("networkInterfaces", () => {
}
});

it("machine", () => {
const possibleValues = [
"arm",
"aarch64",
"mips",
"mips64",
"ppc64",
"ppc64le",
"s390",
"s390x",
"i386",
"i686",
"x86_64",
];
expect(possibleValues.includes(os.machine())).toBe(true);
});

it("EOL", () => {
if (process.platform === "win32") expect(os.EOL).toBe("\\r\\n");
else expect(os.EOL).toBe("\\n");
Expand Down