123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- '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}`
- }
- }
|