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.
		
		
		
		
			
				
					58 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					58 lines
				
				1.6 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								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
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |