You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.3 KiB
129 lines
3.3 KiB
'use strict' |
|
const { inspect } = require('util') |
|
|
|
// adapted from node's internal/errors |
|
// https://github.com/nodejs/node/blob/c8a04049/lib/internal/errors.js |
|
|
|
// close copy of node's internal SystemError class. |
|
class SystemError { |
|
constructor (code, prefix, context) { |
|
// XXX context.code is undefined in all constructors used in cp/polyfill |
|
// that may be a bug copied from node, maybe the constructor should use |
|
// `code` not `errno`? nodejs/node#41104 |
|
let message = `${prefix}: ${context.syscall} returned ` + |
|
`${context.code} (${context.message})` |
|
|
|
if (context.path !== undefined) { |
|
message += ` ${context.path}` |
|
} |
|
if (context.dest !== undefined) { |
|
message += ` => ${context.dest}` |
|
} |
|
|
|
this.code = code |
|
Object.defineProperties(this, { |
|
name: { |
|
value: 'SystemError', |
|
enumerable: false, |
|
writable: true, |
|
configurable: true, |
|
}, |
|
message: { |
|
value: message, |
|
enumerable: false, |
|
writable: true, |
|
configurable: true, |
|
}, |
|
info: { |
|
value: context, |
|
enumerable: true, |
|
configurable: true, |
|
writable: false, |
|
}, |
|
errno: { |
|
get () { |
|
return context.errno |
|
}, |
|
set (value) { |
|
context.errno = value |
|
}, |
|
enumerable: true, |
|
configurable: true, |
|
}, |
|
syscall: { |
|
get () { |
|
return context.syscall |
|
}, |
|
set (value) { |
|
context.syscall = value |
|
}, |
|
enumerable: true, |
|
configurable: true, |
|
}, |
|
}) |
|
|
|
if (context.path !== undefined) { |
|
Object.defineProperty(this, 'path', { |
|
get () { |
|
return context.path |
|
}, |
|
set (value) { |
|
context.path = value |
|
}, |
|
enumerable: true, |
|
configurable: true, |
|
}) |
|
} |
|
|
|
if (context.dest !== undefined) { |
|
Object.defineProperty(this, 'dest', { |
|
get () { |
|
return context.dest |
|
}, |
|
set (value) { |
|
context.dest = value |
|
}, |
|
enumerable: true, |
|
configurable: true, |
|
}) |
|
} |
|
} |
|
|
|
toString () { |
|
return `${this.name} [${this.code}]: ${this.message}` |
|
} |
|
|
|
[Symbol.for('nodejs.util.inspect.custom')] (_recurseTimes, ctx) { |
|
return inspect(this, { |
|
...ctx, |
|
getters: true, |
|
customInspect: false, |
|
}) |
|
} |
|
} |
|
|
|
function E (code, message) { |
|
module.exports[code] = class NodeError extends SystemError { |
|
constructor (ctx) { |
|
super(code, message, ctx) |
|
} |
|
} |
|
} |
|
|
|
E('ERR_FS_CP_DIR_TO_NON_DIR', 'Cannot overwrite directory with non-directory') |
|
E('ERR_FS_CP_EEXIST', 'Target already exists') |
|
E('ERR_FS_CP_EINVAL', 'Invalid src or dest') |
|
E('ERR_FS_CP_FIFO_PIPE', 'Cannot copy a FIFO pipe') |
|
E('ERR_FS_CP_NON_DIR_TO_DIR', 'Cannot overwrite non-directory with directory') |
|
E('ERR_FS_CP_SOCKET', 'Cannot copy a socket file') |
|
E('ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY', 'Cannot overwrite symlink in subdirectory of self') |
|
E('ERR_FS_CP_UNKNOWN', 'Cannot copy an unknown file type') |
|
E('ERR_FS_EISDIR', 'Path is a directory') |
|
|
|
module.exports.ERR_INVALID_ARG_TYPE = class ERR_INVALID_ARG_TYPE extends Error { |
|
constructor (name, expected, actual) { |
|
super() |
|
this.code = 'ERR_INVALID_ARG_TYPE' |
|
this.message = `The ${name} argument must be ${expected}. Received ${typeof actual}` |
|
} |
|
}
|
|
|