var errors = {}; [ /** * node.js errors - we only use some of these, add as needed. */ //'-1:UNKNOWN:unknown error', //'0:OK:success', //'1:EOF:end of file', //'2:EADDRINFO:getaddrinfo error', //'3:EACCES:permission denied', //'4:EAGAIN:resource temporarily unavailable', //'5:EADDRINUSE:address already in use', //'6:EADDRNOTAVAIL:address not available', //'7:EAFNOSUPPORT:address family not supported', //'8:EALREADY:connection already in progress', '9:EBADF:bad file descriptor', '10:EBUSY:resource busy or locked', //'11:ECONNABORTED:software caused connection abort', //'12:ECONNREFUSED:connection refused', //'13:ECONNRESET:connection reset by peer', //'14:EDESTADDRREQ:destination address required', //'15:EFAULT:bad address in system call argument', //'16:EHOSTUNREACH:host is unreachable', //'17:EINTR:interrupted system call', '18:EINVAL:invalid argument', //'19:EISCONN:socket is already connected', //'20:EMFILE:too many open files', //'21:EMSGSIZE:message too long', //'22:ENETDOWN:network is down', //'23:ENETUNREACH:network is unreachable', //'24:ENFILE:file table overflow', //'25:ENOBUFS:no buffer space available', //'26:ENOMEM:not enough memory', '27:ENOTDIR:not a directory', '28:EISDIR:illegal operation on a directory', //'29:ENONET:machine is not on the network', // errno 30 skipped, as per https://github.com/rvagg/node-errno/blob/master/errno.js //'31:ENOTCONN:socket is not connected', //'32:ENOTSOCK:socket operation on non-socket', //'33:ENOTSUP:operation not supported on socket', '34:ENOENT:no such file or directory', //'35:ENOSYS:function not implemented', //'36:EPIPE:broken pipe', //'37:EPROTO:protocol error', //'38:EPROTONOSUPPORT:protocol not supported', //'39:EPROTOTYPE:protocol wrong type for socket', //'40:ETIMEDOUT:connection timed out', //'41:ECHARSET:invalid Unicode character', //'42:EAIFAMNOSUPPORT:address family for hostname not supported', // errno 43 skipped, as per https://github.com/rvagg/node-errno/blob/master/errno.js //'44:EAISERVICE:servname not supported for ai_socktype', //'45:EAISOCKTYPE:ai_socktype not supported', //'46:ESHUTDOWN:cannot send after transport endpoint shutdown', '47:EEXIST:file already exists', //'48:ESRCH:no such process', //'49:ENAMETOOLONG:name too long', '50:EPERM:operation not permitted', '51:ELOOP:too many symbolic links encountered', //'52:EXDEV:cross-device link not permitted', '53:ENOTEMPTY:directory not empty', //'54:ENOSPC:no space left on device', '55:EIO:i/o error', //'56:EROFS:read-only file system', //'57:ENODEV:no such device', //'58:ESPIPE:invalid seek', //'59:ECANCELED:operation canceled', /** * Filer specific errors */ '1000:ENOTMOUNTED:not mounted', '1001:EFILESYSTEMERROR:missing super node, use \'FORMAT\' flag to format filesystem.', '1002:ENOATTR:attribute does not exist' ].forEach(function(e) { e = e.split(':'); var errno = +e[0]; var errName = e[1]; var defaultMessage = e[2]; function FilerError(msg, path) { Error.call(this); this.name = errName; this.code = errName; this.errno = errno; this.message = msg || defaultMessage; if(path) { this.path = path; } this.stack = (new Error(this.message)).stack; } FilerError.prototype = Object.create(Error.prototype); FilerError.prototype.constructor = FilerError; FilerError.prototype.toString = function() { var pathInfo = this.path ? (', \'' + this.path + '\'') : ''; return this.name + ': ' + this.message + pathInfo; }; // We expose the error as both Errors.EINVAL and Errors[18] errors[errName] = errors[errno] = FilerError; }); module.exports = errors;