diff options
Diffstat (limited to 'src/bun.js/node/os/constants.zig')
-rw-r--r-- | src/bun.js/node/os/constants.zig | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/src/bun.js/node/os/constants.zig b/src/bun.js/node/os/constants.zig new file mode 100644 index 000000000..809750dea --- /dev/null +++ b/src/bun.js/node/os/constants.zig @@ -0,0 +1,295 @@ +const std = @import("std"); +const bun = @import("../../../global.zig"); +const string = bun.string; +const Environment = bun.Environment; +const JSC = @import("../../../jsc.zig"); + +const ConstantType = enum { ERRNO, ERRNO_WIN, SIG, DLOPEN, OTHER }; + +fn getErrnoConstant(comptime name: []const u8) comptime_int { + return if (@hasField(std.os.E, name)) + return @enumToInt(@field(std.os.E, name)) + else + return -1; +} + +fn getWindowsErrnoConstant(comptime name: []const u8) comptime_int { + return if (@hasField(std.os.E, name)) + return @enumToInt(@field(std.os.windows.ws2_32.WinsockError, name)) + else + return -1; +} + +fn getSignalsConstant(comptime name: []const u8) comptime_int { + return if (@hasDecl(std.os.SIG, name)) + return @field(std.os.SIG, name) + else + return -1; +} + +fn getDlopenConstant(comptime name: []const u8) comptime_int { + return if (@hasDecl(std.os.system.RTLD, name)) + return @field(std.os.system.RTLD, name) + else + return -1; +} + +fn defineConstant(globalObject: *JSC.JSGlobalObject, object: JSC.JSValue, comptime ctype: ConstantType, comptime name: string) void { + return __defineConstant(globalObject, object, ctype, name, null); +} + +fn __defineConstant(globalObject: *JSC.JSGlobalObject, object: JSC.JSValue, comptime ctype: ConstantType, comptime name: string, comptime value: ?i32) void { + switch (ctype) { + .ERRNO => { + const constant = getErrnoConstant(name); + if (comptime constant != -1) + object.put(globalObject, &JSC.ZigString.init("E" ++ name), JSC.JSValue.jsNumber(constant)); + }, + .ERRNO_WIN => { + const constant = getWindowsErrnoConstant(name); + if (comptime constant != -1) + object.put(globalObject, &JSC.ZigString.init(name), JSC.JSValue.jsNumber(constant)); + }, + .SIG => { + const constant = getSignalsConstant(name); + if (comptime constant != -1) + object.put(globalObject, &JSC.ZigString.init("SIG" ++ name), JSC.JSValue.jsNumber(constant)); + }, + .DLOPEN => { + const constant = getDlopenConstant(name); + if (comptime constant != -1) + object.put(globalObject, &JSC.ZigString.init("RTLD_" ++ name), JSC.JSValue.jsNumber(constant)); + }, + .OTHER => { + object.put(globalObject, &JSC.ZigString.init(name), JSC.JSValue.jsNumberFromInt32(value.?)); + }, + } +} + +pub fn create(globalObject: *JSC.JSGlobalObject) JSC.JSValue { + const object = JSC.JSValue.createEmptyObject(globalObject, 4); + + object.put(globalObject, &JSC.ZigString.init("errno"), createErrno(globalObject)); + object.put(globalObject, &JSC.ZigString.init("signals"), createSignals(globalObject)); + object.put(globalObject, &JSC.ZigString.init("priority"), createPriority(globalObject)); + object.put(globalObject, &JSC.ZigString.init("dlopen"), createDlopen(globalObject)); + __defineConstant(globalObject, object, .OTHER, "UV_UDP_REUSEADDR", 4); + + return object; +} + +fn createErrno(globalObject: *JSC.JSGlobalObject) JSC.JSValue { + const object = JSC.JSValue.createEmptyObject(globalObject, 0); + + defineConstant(globalObject, object, .ERRNO, "2BIG"); + defineConstant(globalObject, object, .ERRNO, "ACCES"); + defineConstant(globalObject, object, .ERRNO, "ADDRINUSE"); + defineConstant(globalObject, object, .ERRNO, "ADDRNOTAVAIL"); + defineConstant(globalObject, object, .ERRNO, "AFNOSUPPORT"); + defineConstant(globalObject, object, .ERRNO, "AGAIN"); + defineConstant(globalObject, object, .ERRNO, "ALREADY"); + defineConstant(globalObject, object, .ERRNO, "BADF"); + defineConstant(globalObject, object, .ERRNO, "BADMSG"); + defineConstant(globalObject, object, .ERRNO, "BUSY"); + defineConstant(globalObject, object, .ERRNO, "CANCELED"); + defineConstant(globalObject, object, .ERRNO, "CHILD"); + defineConstant(globalObject, object, .ERRNO, "CONNABORTED"); + defineConstant(globalObject, object, .ERRNO, "CONNREFUSED"); + defineConstant(globalObject, object, .ERRNO, "CONNRESET"); + defineConstant(globalObject, object, .ERRNO, "DEADLK"); + defineConstant(globalObject, object, .ERRNO, "DESTADDRREQ"); + defineConstant(globalObject, object, .ERRNO, "DOM"); + defineConstant(globalObject, object, .ERRNO, "DQUOT"); + defineConstant(globalObject, object, .ERRNO, "EXIST"); + defineConstant(globalObject, object, .ERRNO, "FAULT"); + defineConstant(globalObject, object, .ERRNO, "FBIG"); + defineConstant(globalObject, object, .ERRNO, "HOSTUNREACH"); + defineConstant(globalObject, object, .ERRNO, "IDRM"); + defineConstant(globalObject, object, .ERRNO, "ILSEQ"); + defineConstant(globalObject, object, .ERRNO, "INPROGRESS"); + defineConstant(globalObject, object, .ERRNO, "INTR"); + defineConstant(globalObject, object, .ERRNO, "INVAL"); + defineConstant(globalObject, object, .ERRNO, "IO"); + defineConstant(globalObject, object, .ERRNO, "ISCONN"); + defineConstant(globalObject, object, .ERRNO, "ISDIR"); + defineConstant(globalObject, object, .ERRNO, "LOOP"); + defineConstant(globalObject, object, .ERRNO, "MFILE"); + defineConstant(globalObject, object, .ERRNO, "MLINK"); + defineConstant(globalObject, object, .ERRNO, "MSGSIZE"); + defineConstant(globalObject, object, .ERRNO, "MULTIHOP"); + defineConstant(globalObject, object, .ERRNO, "NAMETOOLONG"); + defineConstant(globalObject, object, .ERRNO, "NETDOWN"); + defineConstant(globalObject, object, .ERRNO, "NETRESET"); + defineConstant(globalObject, object, .ERRNO, "NETUNREACH"); + defineConstant(globalObject, object, .ERRNO, "NFILE"); + defineConstant(globalObject, object, .ERRNO, "NOBUFS"); + defineConstant(globalObject, object, .ERRNO, "NODATA"); + defineConstant(globalObject, object, .ERRNO, "NODEV"); + defineConstant(globalObject, object, .ERRNO, "NOENT"); + defineConstant(globalObject, object, .ERRNO, "NOEXEC"); + defineConstant(globalObject, object, .ERRNO, "NOLCK"); + defineConstant(globalObject, object, .ERRNO, "NOLINK"); + defineConstant(globalObject, object, .ERRNO, "NOMEM"); + defineConstant(globalObject, object, .ERRNO, "NOMSG"); + defineConstant(globalObject, object, .ERRNO, "NOPROTOOPT"); + defineConstant(globalObject, object, .ERRNO, "NOSPC"); + defineConstant(globalObject, object, .ERRNO, "NOSR"); + defineConstant(globalObject, object, .ERRNO, "NOSTR"); + defineConstant(globalObject, object, .ERRNO, "NOSYS"); + defineConstant(globalObject, object, .ERRNO, "NOTCONN"); + defineConstant(globalObject, object, .ERRNO, "NOTDIR"); + defineConstant(globalObject, object, .ERRNO, "NOTEMPTY"); + defineConstant(globalObject, object, .ERRNO, "NOTSOCK"); + defineConstant(globalObject, object, .ERRNO, "NOTSUP"); + defineConstant(globalObject, object, .ERRNO, "NOTTY"); + defineConstant(globalObject, object, .ERRNO, "NXIO"); + defineConstant(globalObject, object, .ERRNO, "OPNOTSUPP"); + defineConstant(globalObject, object, .ERRNO, "OVERFLOW"); + defineConstant(globalObject, object, .ERRNO, "PERM"); + defineConstant(globalObject, object, .ERRNO, "PIPE"); + defineConstant(globalObject, object, .ERRNO, "PROTO"); + defineConstant(globalObject, object, .ERRNO, "PROTONOSUPPORT"); + defineConstant(globalObject, object, .ERRNO, "PROTOTYPE"); + defineConstant(globalObject, object, .ERRNO, "RANGE"); + defineConstant(globalObject, object, .ERRNO, "ROFS"); + defineConstant(globalObject, object, .ERRNO, "SPIPE"); + defineConstant(globalObject, object, .ERRNO, "SRCH"); + defineConstant(globalObject, object, .ERRNO, "STALE"); + defineConstant(globalObject, object, .ERRNO, "TIME"); + defineConstant(globalObject, object, .ERRNO, "TIMEDOUT"); + defineConstant(globalObject, object, .ERRNO, "TXTBSY"); + defineConstant(globalObject, object, .ERRNO, "WOULDBLOCK"); + defineConstant(globalObject, object, .ERRNO, "XDEV"); + + if (comptime Environment.isWindows) { + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEINTR"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEBADF"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEACCES"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEFAULT"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEINVAL"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEMFILE"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEWOULDBLOCK"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEINPROGRESS"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEALREADY"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAENOTSOCK"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEDESTADDRREQ"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEMSGSIZE"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEPROTOTYPE"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAENOPROTOOPT"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEPROTONOSUPPORT"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAESOCKTNOSUPPORT"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEOPNOTSUPP"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEPFNOSUPPORT"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEAFNOSUPPORT"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEADDRINUSE"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEADDRNOTAVAIL"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAENETDOWN"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAENETUNREACH"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAENETRESET"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAECONNABORTED"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAECONNRESET"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAENOBUFS"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEISCONN"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAENOTCONN"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAESHUTDOWN"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAETOOMANYREFS"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAETIMEDOUT"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAECONNREFUSED"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAELOOP"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAENAMETOOLONG"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEHOSTDOWN"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEHOSTUNREACH"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAENOTEMPTY"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEPROCLIM"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEUSERS"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEDQUOT"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAESTALE"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEREMOTE"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSASYSNOTREADY"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAVERNOTSUPPORTED"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSANOTINITIALISED"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEDISCON"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAENOMORE"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAECANCELLED"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEINVALIDPROCTABLE"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEINVALIDPROVIDER"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEPROVIDERFAILEDINIT"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSASYSCALLFAILURE"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSASERVICE_NOT_FOUND"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSATYPE_NOT_FOUND"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSA_E_NO_MORE"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSA_E_CANCELLED"); + defineConstant(globalObject, object, .ERRNO_WIN, "WSAEREFUSED"); + } + + return object; +} + +fn createSignals(globalObject: *JSC.JSGlobalObject) JSC.JSValue { + const object = JSC.JSValue.createEmptyObject(globalObject, 0); + + defineConstant(globalObject, object, .SIG, "HUP"); + defineConstant(globalObject, object, .SIG, "INT"); + defineConstant(globalObject, object, .SIG, "QUIT"); + defineConstant(globalObject, object, .SIG, "ILL"); + defineConstant(globalObject, object, .SIG, "TRAP"); + defineConstant(globalObject, object, .SIG, "ABRT"); + defineConstant(globalObject, object, .SIG, "IOT"); + defineConstant(globalObject, object, .SIG, "BUS"); + defineConstant(globalObject, object, .SIG, "FPE"); + defineConstant(globalObject, object, .SIG, "KILL"); + defineConstant(globalObject, object, .SIG, "USR1"); + defineConstant(globalObject, object, .SIG, "SEGV"); + defineConstant(globalObject, object, .SIG, "USR2"); + defineConstant(globalObject, object, .SIG, "PIPE"); + defineConstant(globalObject, object, .SIG, "ALRM"); + defineConstant(globalObject, object, .SIG, "TERM"); + defineConstant(globalObject, object, .SIG, "CHLD"); + defineConstant(globalObject, object, .SIG, "STKFLT"); + defineConstant(globalObject, object, .SIG, "CONT"); + defineConstant(globalObject, object, .SIG, "STOP"); + defineConstant(globalObject, object, .SIG, "TSTP"); + defineConstant(globalObject, object, .SIG, "BREAK"); + defineConstant(globalObject, object, .SIG, "TTIN"); + defineConstant(globalObject, object, .SIG, "TTOU"); + defineConstant(globalObject, object, .SIG, "URG"); + defineConstant(globalObject, object, .SIG, "XCPU"); + defineConstant(globalObject, object, .SIG, "XFSZ"); + defineConstant(globalObject, object, .SIG, "VTALRM"); + defineConstant(globalObject, object, .SIG, "PROF"); + defineConstant(globalObject, object, .SIG, "WINCH"); + defineConstant(globalObject, object, .SIG, "IO"); + defineConstant(globalObject, object, .SIG, "POLL"); + defineConstant(globalObject, object, .SIG, "LOST"); + defineConstant(globalObject, object, .SIG, "PWR"); + defineConstant(globalObject, object, .SIG, "INFO"); + defineConstant(globalObject, object, .SIG, "SYS"); + defineConstant(globalObject, object, .SIG, "UNUSED"); + + return object; +} + +fn createPriority(globalObject: *JSC.JSGlobalObject) JSC.JSValue { + const object = JSC.JSValue.createEmptyObject(globalObject, 6); + + __defineConstant(globalObject, object, .OTHER, "PRIORITY_LOW", 19); + __defineConstant(globalObject, object, .OTHER, "PRIORITY_BELOW_NORMAL", 10); + __defineConstant(globalObject, object, .OTHER, "PRIORITY_NORMAL", 0); + __defineConstant(globalObject, object, .OTHER, "PRIORITY_ABOVE_NORMAL", -7); + __defineConstant(globalObject, object, .OTHER, "PRIORITY_HIGH", -14); + __defineConstant(globalObject, object, .OTHER, "PRIORITY_HIGHEST", -20); + + return object; +} + +fn createDlopen(globalObject: *JSC.JSGlobalObject) JSC.JSValue { + const object = JSC.JSValue.createEmptyObject(globalObject, 6); + + defineConstant(globalObject, object, .DLOPEN, "LAZY"); + defineConstant(globalObject, object, .DLOPEN, "NOW"); + defineConstant(globalObject, object, .DLOPEN, "GLOBAL"); + defineConstant(globalObject, object, .DLOPEN, "LOCAL"); + defineConstant(globalObject, object, .DLOPEN, "DEEPBIND"); + + return object; +} |