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