aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/node/os/constants.zig
blob: 6a217c32e8145e213cf60d0618f649df7bbe29f2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
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 null;
}

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 null;
}

fn getSignalsConstant(comptime name: []const u8) ?comptime_int {
    return if (@hasDecl(std.os.SIG, name))
        return @field(std.os.SIG, name)
    else
        return null;
}

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 null;
}

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 => {
            if (comptime getErrnoConstant(name)) |constant| {
                object.put(globalObject, JSC.ZigString.static("E" ++ name), JSC.JSValue.jsNumber(constant));
            }
        },
        .ERRNO_WIN => {
            if (comptime getWindowsErrnoConstant(name)) |constant| {
                object.put(globalObject, JSC.ZigString.static(name), JSC.JSValue.jsNumber(constant));
            }
        },
        .SIG => {
            if (comptime getSignalsConstant(name)) |constant| {
                object.put(globalObject, JSC.ZigString.static("SIG" ++ name), JSC.JSValue.jsNumber(constant));
            }
        },
        .DLOPEN => {
            if (comptime getDlopenConstant(name)) |constant| {
                object.put(globalObject, JSC.ZigString.static("RTLD_" ++ name), JSC.JSValue.jsNumber(constant));
            }
        },
        .OTHER => {
            object.put(globalObject, JSC.ZigString.static(name), JSC.JSValue.jsNumberFromInt32(value.?));
        },
    }
}

pub fn create(globalObject: *JSC.JSGlobalObject) JSC.JSValue {
    const object = JSC.JSValue.createEmptyObject(globalObject, 0);

    object.put(globalObject, JSC.ZigString.static("errno"), createErrno(globalObject));
    object.put(globalObject, JSC.ZigString.static("signals"), createSignals(globalObject));
    object.put(globalObject, JSC.ZigString.static("priority"), createPriority(globalObject));
    object.put(globalObject, JSC.ZigString.static("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, 5);

    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;
}