| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | 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  }}
 |