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.
		
		
		
		
		
			
		
			
				
					
					
						
							57 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							57 lines
						
					
					
						
							1.6 KiB
						
					
					
				var prr = require('prr') | 
						|
 | 
						|
function init (type, message, cause) { | 
						|
  if (!!message && typeof message != 'string') { | 
						|
    message = message.message || message.name | 
						|
  } | 
						|
  prr(this, { | 
						|
      type    : type | 
						|
    , name    : type | 
						|
      // can be passed just a 'cause' | 
						|
    , cause   : typeof message != 'string' ? message : cause | 
						|
    , message : message | 
						|
  }, 'ewr') | 
						|
} | 
						|
 | 
						|
// generic prototype, not intended to be actually used - helpful for `instanceof` | 
						|
function CustomError (message, cause) { | 
						|
  Error.call(this) | 
						|
  if (Error.captureStackTrace) | 
						|
    Error.captureStackTrace(this, this.constructor) | 
						|
  init.call(this, 'CustomError', message, cause) | 
						|
} | 
						|
 | 
						|
CustomError.prototype = new Error() | 
						|
 | 
						|
function createError (errno, type, proto) { | 
						|
  var err = function (message, cause) { | 
						|
    init.call(this, type, message, cause) | 
						|
    //TODO: the specificity here is stupid, errno should be available everywhere | 
						|
    if (type == 'FilesystemError') { | 
						|
      this.code    = this.cause.code | 
						|
      this.path    = this.cause.path | 
						|
      this.errno   = this.cause.errno | 
						|
      this.message = | 
						|
        (errno.errno[this.cause.errno] | 
						|
          ? errno.errno[this.cause.errno].description | 
						|
          : this.cause.message) | 
						|
        + (this.cause.path ? ' [' + this.cause.path + ']' : '') | 
						|
    } | 
						|
    Error.call(this) | 
						|
    if (Error.captureStackTrace) | 
						|
      Error.captureStackTrace(this, err) | 
						|
  } | 
						|
  err.prototype = !!proto ? new proto() : new CustomError() | 
						|
  return err | 
						|
} | 
						|
 | 
						|
module.exports = function (errno) { | 
						|
  var ce = function (type, proto) { | 
						|
    return createError(errno, type, proto) | 
						|
  } | 
						|
  return { | 
						|
      CustomError     : CustomError | 
						|
    , FilesystemError : ce('FilesystemError') | 
						|
    , createError     : ce | 
						|
  } | 
						|
}
 | 
						|
 |