Files
bun.sh/src/sys/libuv_error_map.zig
Alistair Smith be5c69df79 fix: main is not readonly in @types/node (#21612)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-04 13:07:42 -07:00

106 lines
4.9 KiB
Zig

/// This map is derived off of uv.h's definitions, and is what Node.js uses in printing errors.
pub const libuv_error_map = brk: {
const entries: []const struct { [:0]const u8, [:0]const u8 } = &.{
.{ "E2BIG", "argument list too long" },
.{ "EACCES", "permission denied" },
.{ "EADDRINUSE", "address already in use" },
.{ "EADDRNOTAVAIL", "address not available" },
.{ "EAFNOSUPPORT", "address family not supported" },
.{ "EAGAIN", "resource temporarily unavailable" },
.{ "EAI_ADDRFAMILY", "address family not supported" },
.{ "EAI_AGAIN", "temporary failure" },
.{ "EAI_BADFLAGS", "bad ai_flags value" },
.{ "EAI_BADHINTS", "invalid value for hints" },
.{ "EAI_CANCELED", "request canceled" },
.{ "EAI_FAIL", "permanent failure" },
.{ "EAI_FAMILY", "ai_family not supported" },
.{ "EAI_MEMORY", "out of memory" },
.{ "EAI_NODATA", "no address" },
.{ "EAI_NONAME", "unknown node or service" },
.{ "EAI_OVERFLOW", "argument buffer overflow" },
.{ "EAI_PROTOCOL", "resolved protocol is unknown" },
.{ "EAI_SERVICE", "service not available for socket type" },
.{ "EAI_SOCKTYPE", "socket type not supported" },
.{ "EALREADY", "connection already in progress" },
.{ "EBADF", "bad file descriptor" },
.{ "EBUSY", "resource busy or locked" },
.{ "ECANCELED", "operation canceled" },
.{ "ECHARSET", "invalid Unicode character" },
.{ "ECONNABORTED", "software caused connection abort" },
.{ "ECONNREFUSED", "connection refused" },
.{ "ECONNRESET", "connection reset by peer" },
.{ "EDESTADDRREQ", "destination address required" },
.{ "EEXIST", "file already exists" },
.{ "EFAULT", "bad address in system call argument" },
.{ "EFBIG", "file too large" },
.{ "EHOSTUNREACH", "host is unreachable" },
.{ "EINTR", "interrupted system call" },
.{ "EINVAL", "invalid argument" },
.{ "EIO", "i/o error" },
.{ "EISCONN", "socket is already connected" },
.{ "EISDIR", "illegal operation on a directory" },
.{ "ELOOP", "too many symbolic links encountered" },
.{ "EMFILE", "too many open files" },
.{ "EMSGSIZE", "message too long" },
.{ "ENAMETOOLONG", "name too long" },
.{ "ENETDOWN", "network is down" },
.{ "ENETUNREACH", "network is unreachable" },
.{ "ENFILE", "file table overflow" },
.{ "ENOBUFS", "no buffer space available" },
.{ "ENODEV", "no such device" },
.{ "ENOENT", "no such file or directory" },
.{ "ENOMEM", "not enough memory" },
.{ "ENONET", "machine is not on the network" },
.{ "ENOPROTOOPT", "protocol not available" },
.{ "ENOSPC", "no space left on device" },
.{ "ENOSYS", "function not implemented" },
.{ "ENOTCONN", "socket is not connected" },
.{ "ENOTDIR", "not a directory" },
.{ "ENOTEMPTY", "directory not empty" },
.{ "ENOTSOCK", "socket operation on non-socket" },
.{ "ENOTSUP", "operation not supported on socket" },
.{ "EOVERFLOW", "value too large for defined data type" },
.{ "EPERM", "operation not permitted" },
.{ "EPIPE", "broken pipe" },
.{ "EPROTO", "protocol error" },
.{ "EPROTONOSUPPORT", "protocol not supported" },
.{ "EPROTOTYPE", "protocol wrong type for socket" },
.{ "ERANGE", "result too large" },
.{ "EROFS", "read-only file system" },
.{ "ESHUTDOWN", "cannot send after transport endpoint shutdown" },
.{ "ESPIPE", "invalid seek" },
.{ "ESRCH", "no such process" },
.{ "ETIMEDOUT", "connection timed out" },
.{ "ETXTBSY", "text file is busy" },
.{ "EXDEV", "cross-device link not permitted" },
.{ "UNKNOWN", "unknown error" },
.{ "EOF", "end of file" },
.{ "ENXIO", "no such device or address" },
.{ "EMLINK", "too many links" },
.{ "EHOSTDOWN", "host is down" },
.{ "EREMOTEIO", "remote I/O error" },
.{ "ENOTTY", "inappropriate ioctl for device" },
.{ "EFTYPE", "inappropriate file type or format" },
.{ "EILSEQ", "illegal byte sequence" },
.{ "ESOCKTNOSUPPORT", "socket type not supported" },
.{ "ENODATA", "no data available" },
.{ "EUNATCH", "protocol driver not attached" },
};
var map = std.EnumMap(SystemErrno, [:0]const u8).initFull("unknown error");
for (entries) |entry| {
const key, const text = entry;
if (@hasField(SystemErrno, key)) {
map.put(@field(SystemErrno, key), text);
}
}
// sanity check
bun.assert(std.mem.eql(u8, map.get(SystemErrno.ENOENT).?, "no such file or directory"));
break :brk map;
};
const bun = @import("bun");
const std = @import("std");
const SystemErrno = bun.sys.SystemErrno;