Spaces:
Paused
Paused
| 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}` | |
| } | |
| } | |